简单的石头剪刀布小游戏
/**游戏规则
- 猜拳游戏
- 玩家和电脑进行猜拳(石头剪刀布)
- 每回合分别由玩家和电脑依次出拳
- 打印显示双方出拳的结果,并对结果进行判定
- 回合结束后询问玩家是否要继续游戏
- 如果玩家选择继续游戏则开启下一个回合的猜拳
- 否则游戏结束
- 游戏结束后统计前面回合的数据
- 数据要求显示游戏的总局数,玩家胜利的场数,平局的场数以及失败的场数并显示胜率
- 根据胜利的场数打印显示最终结果(玩家胜场大于电脑胜场则表示玩家胜利)
*/
主要步骤
在一个Package里new出四个class,四个class分别为
Game,Computer,Player,GameApp
1.在Game中编写游戏的方法包括执行游戏回合、出拳数值转化为字符信息和显示游戏统计结果两部分;接着再详细描写执行游戏的部分,让玩家和电脑先后出拳再判断出拳结果,一局结束后询问玩家是否要继续游戏,若继续游戏,递归执行游戏回合。由于电脑随机输入的是int类型,为了优化游戏需将int类型转化为String类型。
import java.util.Scanner;
/**
* 游戏类 封装了游戏的业务内容
*/
public class Game {
//玩家
private Player player = new Player();
//电脑
private Computer cpu = new Computer();
private Scanner scanner = new Scanner(System.in);
//游戏的总局数
private int count;
/**
* 开启游戏
*/
public void start(){
//执行游戏回合
gameLogic();
//显示游戏统计结果
showResult();
}
/**
* 每个回合的游戏内容
*/
public void gameLogic(){
//计算游戏的次数
count++;
//玩家出拳
int n1 = player.showFinger();
//电脑出拳
int n2 = cpu.showFinger();
//显示出拳结果
String playerFinger = changeFinger(n1);
String cpuFinger = changeFinger(n2);
System.out.println("玩家出拳:"+playerFinger);
System.out.println("电脑出拳:"+cpuFinger);
//判定出拳结果
if(n1 == n2){
//平局
player.setDogfallCount(player.getDogfallCount()+1);
System.out.println("该轮平局!");
}else if(n1 == 1 && n2 == 2 || n1 == 2 && n2 == 3 || n1 == 3 && n2 == 1){
//胜局
player.setWinCount(player.getWinCount()+1);
System.out.println("该轮胜利!");
}else{
//败局
player.setLoseCount(player.getLoseCount()+1);
System.out.println("该轮失败!");
}
//询问玩家是否继续游戏
System.out.println("是否要继续游戏?(Y/N)");
String answer = scanner.next();
if(answer.equalsIgnoreCase("Y")){
//递归执行游戏回合
gameLogic();
}
}
/**
* 将出拳的数值转换为字符信息(石头剪刀布)的方法
* @param finger
* @return
*/
public String changeFinger(int finger){
String fingerStr = "";
switch(finger){
case 1:
fingerStr = "石头";
break;
case 2:
fingerStr = "剪刀";
break;
case 3:
fingerStr = "布";
}
return fingerStr;
}
/**
* 游戏结果的显示统计
*/
public void showResult(){
//打印显示基本数据
System.out.println("游戏总轮数:"+count);
System.out.println("胜利场次:"+player.getWinCount());
System.out.println("平局场次:"+player.getDogfallCount());
System.out.println("失败场次:"+player.getLoseCount());
//计算胜率
int winRate = (int)(player.getWinCount()/(double)count*100);
System.out.println("胜率:"+winRate+"%");
//评定游戏最终结果
if(player.getWinCount() > player.getLoseCount()){
System.out.println("恭喜您最终获得胜利!");
}else if(player.getWinCount() < player.getLoseCount()){
System.out.println("很遗憾,您败给了电脑!");
}else{
System.out.println("此次游戏不分伯仲!");
}
}
}
2.在Computer类里编写出拳方法,需要用到Random类是电脑随机出拳
import java.util.Random;
/**
* 电脑类
*/
public class Computer {
/**
* 出拳的方法
*/
public int showFinger(){
//使用随机数(1—3)出拳
Random random=new Random();
int finger2=random.nextInt(3)+1;
return finger2;
}
}
3.在Player类中定义玩家出拳的方法
import java.util.Scanner;
/**
* 玩家类
*/
public class Player {
//胜场
private int winCount;
//平场
private int dogfallCount;
//输场
private int loseCount;
public int getWinCount() {
return winCount;
}
public void setWinCount(int winCount) {
this.winCount = winCount;
}
public int getDogfallCount() {
return dogfallCount;
}
public void setDogfallCount(int dogfallCount) {
this.dogfallCount = dogfallCount;
}
public int getLoseCount() {
return loseCount;
}
public void setLoseCount(int loseCount) {
this.loseCount = loseCount;
}
Scanner scanner=new Scanner(System.in);
/**
*出拳的方法
*/
public int showFinger(){
//玩家通过键盘输入选择出拳结果
System.out.println("请玩家出拳:(1.石头 2.剪刀 3.布)");
int finger1=scanner.nextInt();
return finger1;
}
}
4.GameApp调用整个游戏的方法
public class GameApp {
public static void main(String[] args) {
Game game=new Game();
game.start();
}
}