本人是一名大学生,刚起步编写了一个java小游戏,每一步都是自己经过思考和查阅资料
来完成的,希望多年以后能在SCDN这个社区中看到自己的足迹,也希望这篇博客能够帮助
那些为接触java语言的小伙伴们!至于代码怎么样对于初学者而言 建立起逻辑是最重要的
这也是我第一篇社区文章!
时间:2023年6月10日14:21:19
地点:南京
目的:学习java
功能:实现一个java的猜拳小游戏
作者:wkx
第一节 计算机类的创建................................................................ 1
1.1创建计算机类流程图....................................................... 1
1.2实现计算机类代码........................................................... 1
1.3运行代码界面................................................................... 2
第二节 用户类的创建................................................................... 4
2.1创建用户类流程图........................................................... 4
2.2实现用户类代码............................................................... 4
2.3运行代码界面................................................................... 5
第三节 游戏类的创建................................................................... 7
3.1创建游戏类流程图........................................................... 7
3.2实现游戏类代码............................................................... 7
3.3运行代码界面................................................................... 9
第四节 循环对战实现................................................................. 10
4.1创建循环对战流程图..................................................... 10
4.2实现循环对战代码......................................................... 10
4.3运行代码界面................................................................. 13
第五节 对战结果显示................................................................. 14
5.1创建对战结果流程图..................................................... 14
5.2实现对战结果代码......................................................... 14
5.3运行代码界面................................................................. 16
第六节 游戏功能扩展................................................................. 18
6.1 创建功能扩展流程图.................................................... 18
6.2 实现功能扩展代码........................................................ 18
第一节 计算机类的创建
1.1创建计算机类流程图
1.2实现计算机类代码
- showFist()利用import java.util.*接口调用java.util.Random产生随机数
- getName()和setName()用于获取名字
- getScore()和setScore()用于获取得分
- Computer类包含两个属性和一个方法score、name、showFist()
- 计算机类和测试类:阶段2代码实现如下图
package 猜拳游戏包;
import java.util.*;
/**
* 计算机类
* 阶段2完成
*/
public class Computer {
String name="电脑" ; // 名字
int score = 0;// 积分
int i = 0;//猜拳随机数
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
/**
* 出拳
*
* @return 出拳结果:1.剪刀 2.石头 3.布
*/
public int showFist() {
Random random = new Random();
setI(random.nextInt(3) + 1);
switch (getI()) {
case 1:
System.out.println(name + "出剪刀");
break;
case 2:
System.out.println(name + "出石头");
break;
case 3:
System.out.println(name + "出布");
break;
}
return 0;
}
}
package test;
import 猜拳游戏包.Computer;
/**
* 人机互动版猜拳游戏
* 阶段2:测试电脑出拳
*/
public class TestComputer {
public static void main(String[] args) {
Computer computer=new Computer();
computer.showFist();
}
}
1.3运行代码界面
- 运行结果
第二节 用户类的创建
2.1创建用户类流程图
图2.1
2.2实现用户类代码
- Person类包含两个属性五个方法
- getName()和setName()用于获取名字
- getScore()和setScore()用于获取得分
- showFist()方法:接收用户的选择并返回出拳结果
- 用户类和测试类如下图
package 猜拳游戏包;
public class Person {
String name = null; // 名字
int score = 0; // 积分
public int showFist(int i) {
switch (i) {
case 1:
System.out.println(name + "出剪刀");
break;
case 2:
System.out.println(name + "出石头");
break;
case 3:
System.out.println(name + "出布");
break;
default:
System.out.println("输入错误!");
break;
}
return i;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package test;
import 猜拳游戏包.Person;
import java.util.Scanner;
public class TestPerson {
public static void main(String[] args) {
Person person = new Person();
System.out.println("输入:1-剪刀,2-石头,3-布");
Scanner input = new Scanner(System.in);
int i = input.nextInt();
person.showFist(i);
}
}
2.3运行代码界面
- 运行结果
第三节 游戏类的创建
3.1创建游戏类流程图
图3.1
3.2实现游戏类代码
- 定义一个Game1类包含三个属性两个方法
- Count用于记录对战次数
- Initial()用于初始化属性值
- StartGame()用于人物的选择
- 游戏类:阶段1如下图
package 猜拳游戏包;
/**
* 游戏类
*/
public class Game1 {
Person person; //甲方
Computer computer; //乙方
int count; //对战次数
/**
* 初始化
*/
public void initial() {
person = new Person();
computer = new Computer();
count = 0;
}
/**
* 开始游戏
*/
public void startGame(int i) {
switch (i) {
case 1:
person.setName("刘备");
break;
case 2:
person.setName("孙权");
break;
case 3:
person.setName("曹操");
break;
}
System.out.println("你选择" + person.getName() + "出战");
}
}
- 测试类:阶段2
package test;
import 猜拳游戏包.Game1;
import java.util.Scanner;
/**
* 人机互动版猜拳游戏
* 阶段3:测试开始游戏:选择对战角色
*/
public class TestGame1 {
public static void main(String[] args) {
Game1 g=new Game1();
System.out.println();
System.out.println();
System.out.println(" **************** ");
System.out.println(" ** 猜拳 开始 ** ");
System.out.println(" **************** ");
System.out.println("出拳规则:1.剪刀 2.石头 3.布");
Scanner input=new Scanner(System.in);
System.out.println("请选择对方角色:1:刘备 2:孙权 3:曹操");
int i=input.nextInt();
g.initial();
g.startGame(i);
}
}
3.3运行代码界面
第四节 循环对战实现
4.1创建循环对战流程图
图4.1
4.2实现循环对战代码
首先调用person 对象的 showFist() 方法和 computer 对象的 showFist() 方法,分别获取用户和计算机的出拳并根据用户和计算机的出拳结果进行裁决,根据规则判断胜负,并显示对战结果
- 定义一个Game3类包含3个属性3个方法
- SetPersonName()用于人物选择设置
- StartGame()用于游戏开始规则
- Scanner作用:可以实现键盘输入数据,到程序中
- 游戏类:阶段5代码如下图
package 猜拳游戏包;
/**
* 游戏类
* 阶段5:实现循环对战
*/
public class Game3 {
Person person; //甲方
Computer computer; //乙方
int count; //对战次数
/**
* 初始化
*/
public void initial() {
person = new Person();
computer = new Computer();
count = 0;
}
/**
* 设置玩家名字
*/
public void setPersonName(int i) {
switch (i) {
case 1:
person.setName("刘备");
break;
case 2:
person.setName("孙权");
break;
case 3:
person.setName("曹操");
break;
}
System.out.println("你选择" + person.getName() + "出战");
}
/**
* 开始游戏 1剪刀 2石头 3布
*/
public void startGame(int k) {
person.showFist(k);
computer.showFist();
int j = computer.getI();
if ((j == 1 && k == 1) || (j == 2 && k == 2) || (j == 3 && k == 3)) {
System.out.println("平局");
} else if ((j == 1 && k == 2) || (j == 2 && k == 3) || (j == 3 && k == 1)) {
System.out.println(person.getName() + "胜出");
} else {
System.out.println(computer.name + "胜出");
}
}
}
- 测试游戏类:阶段4
package test;
import java.util.Scanner;
import 猜拳游戏包.*;
/**
* 人机互动版猜拳游戏
* 阶段4:测试开始游戏:实现1局对战
*/
public class TestGame3 {
public static void main(String[] args) {
Game3 g3 = new Game3();
g3.initial();
Scanner input = new Scanner(System.in);
System.out.println(" **************** ");
System.out.println(" ** 猜拳,开始 ** ");
System.out.println(" **************** ");
System.out.println("出拳规则:1.剪刀 2.石头 3.布");
System.out.println("请选择对方角色:1:刘备 2:孙权 3:曹操");
int i = input.nextInt();
g3.setPersonName(i);
for (int t = 0; t < 5; t++) {
System.out.println("输入:1-剪刀,2-石头,3-布");
int j = input.nextInt();
g3.startGame(j);
}
}
}
4.3运行代码界面
第五节 对战结果显示
5.1创建对战结果流程图
5.2实现对战结果代码
首先调用person 对象的 showFist() 方法和 computer 对象的 showFist() 方法,分别获取用户和计算机的出拳并根据用户和计算机的出拳结果进行裁决,然后根据规则判断胜负,显示对战结果,最后通过count记录比赛次数
- 游戏类:阶段6
package 猜拳游戏包;
/**
* 游戏类
* 阶段6:实现对战结果显示
*/
public class Game4 {
Person person; //甲方
Computer computer; //乙方
int count; //对战次数
int temp;
/**
* 初始化
*/
public void initial(){
person = new Person();
computer = new Computer();
count = 0;
}
/**
* 开始游戏
*/
public void startGame(int k) {
person.showFist(k);
computer.showFist();
int j = computer.getI();
if ((j == 1 && k == 1) || (j == 2 && k == 2) || (j == 3 && k == 3)) {
temp = 1;
} else if ((j == 1 && k == 2) || (j == 2 && k == 3) || (j == 3 && k == 1)) {
temp = 2;
person.setScore(person.getScore() + 1);
} else {
temp = 3;
computer.setScore(computer.getScore() + 1);
}
count++;
}
/**
* 显示比赛结果
*/
public void showResult(){
switch (temp) {
case 1:
System.out.println("平局");
break;
case 2:
System.out.println(person.getName() + "胜出");
break;
case 3:
System.out.println(computer.name + "胜出");
break;
}
}
/**
* 计算比赛结果
* @return 1:战平;2:用户赢;3:电脑赢
*/
public int calcResult(){
System.out.println();
System.out.println("---------------------------------------------");
System.out.println("总共进行" + count + "局比赛");
if (person.getScore() == computer.getScore()) {
return 1;
} else if (person.getScore() > computer.getScore()) {
return 2;
} else {
return 3;
}
}
}
- 测试类
package test;
import 猜拳游戏包.Game4;
import java.util.Scanner;
/**
* 人机互动版猜拳游戏
*/
public class TestGame4 {
public static void main(String[] args) {
Game4 game4 = new Game4();
game4.initial();
Scanner scanner = new Scanner(System.in);
for (int t = 0; t < 3; t++) {
System.out.println();
System.out.println("输入:1-剪刀,2-石头,3-布");
game4.startGame(scanner.nextInt());
game4.showResult();
}
int t = game4.calcResult();
if (t == 1) {
System.out.println("战平");
} else if (t == 2) {
System.out.println("用户胜利");
} else {
System.out.println("电脑胜利");
}
}
}
5.3运行代码界面
- 运行结果
第六节 游戏功能扩展
6.1 创建功能扩展流程图
图6.1
6.2 实现功能扩展代码
- 游戏类:最后阶段
package 猜拳游戏包;
/**
* 游戏类
* 对战结果显示
*/
public class Game {
Person person; //甲方
Computer computer; //乙方
int count; //对战次数
int temp = 0; //显示结果计数
/**
* 初始化
*/
public void initial() {
person = new Person();
computer = new Computer();
count = 0;
}
/**
* 设置对方与己方名字
*/
public void setComputerName(int i) {
switch (i) {
case 1:
computer.setName("刘备");
break;
case 2:
computer.setName("孙权");
break;
case 3:
computer.setName("曹操");
break;
}
System.out.println("你选择对方" + computer.getName() + "出战");
}
public void setPersonName(String s) {
person.setName(s);
System.out.println(person.getName() + " VS " + computer.getName());
}
/**
* 是否开始游戏
*/
public boolean startGame_open(String s) {
if (s.equals("y")) {
return true;
} else {
return false;
}
}
/**
* 开始游戏
*/
public void startGame(int k) {
person.showFist(k);
computer.showFist();
int j = computer.getI();
if ((j == 1 && k == 1) || (j == 2 && k == 2) || (j == 3 && k == 3)) {
temp = 1;
} else if ((j == 1 && k == 2) || (j == 2 && k == 3) || (j == 3 && k == 1)) {
temp = 2;
person.setScore(person.getScore() + 1);
} else {
temp = 3;
computer.setScore(computer.getScore() + 1);
}
count++;
}
/**
* 显示比赛结果
*/
public void showResult() {
switch (temp) {
case 1:
System.out.println("平局");
break;
case 2:
System.out.println(person.getName() + "胜出");
break;
case 3:
System.out.println(computer.getName() + "胜出");
break;
}
}
/**
* 计算比赛结果
*
* @return 1:战平;2:用户赢;3:电脑赢
*/
public int calcResult() {
System.out.println();
System.out.println("---------------------------------------------");
System.out.println("总共进行" + count + "局比赛");
if (person.getScore() == computer.getScore()) {
return 1;
} else if (person.getScore() > computer.getScore()) {
return 2;
} else {
return 3;
}
}
public void calcResult_final() {
int t = calcResult();
if (t == 1) {
System.out.println("战平");
} else if (t == 2) {
System.out.println(person.getName() + "胜利");
} else {
System.out.println(computer.getName() + "胜利");
}
}
}
- 测试类
package test;
import 猜拳游戏包.Game;
import java.util.Scanner;
public class StartGuess {
/**
* 人机互动版猜拳游戏
*/
public static void main(String[] args) {
Game game = new Game();
game.initial();
Scanner scanner = new Scanner(System.in);
System.out.println(" **************** ");
System.out.println(" ** 猜拳,开始 ** ");
System.out.println(" **************** ");
System.out.println("出拳规则:1.剪刀 2.石头 3.布");
System.out.println("请选择对方角色:1:刘备 2:孙权 3:曹操");
game.setComputerName(scanner.nextInt());
System.out.println("输入你的名字:");
game.setPersonName(scanner.next());
System.out.println();
System.out.println("开始吗[y/n]");
while (game.startGame_open(scanner.next())) {
System.out.println();
System.out.println("输入:1-剪刀,2-石头,3-布");
game.startGame(scanner.nextInt());
game.showResult();
System.out.println("要继续吗[y/n]");
}
game.calcResult_final();
}
}
6.3 运行代码结果
- 运行结果