这是本学期的java作业:
java编写一个人机对战的猜拳小游戏。人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况。有简单的操作界面。
学了一个学期的Java,感觉收获还挺多的。第一次用Java写小游戏,感觉貌似很难。刚开始没有什么思路,看了老师给出的例子程序,似乎有了点头绪。开始动手敲代码。遇到问题难免的,后来总算还是完成了作业。下面进行一下总结。
首先奉上源代码:
import java.util.Scanner; //通过import语句引入Scanner类
public class Game{
public static void main(String args[]){
int x=0; //用户的初始分数为0
int y=0; //电脑的初始分数为0
int z=0; //开始时决战次数为0
System.out.println("\n");
System.out.println("猜拳游戏现在开始,准备好了吗?");
System.out.println("===========游戏规则===========");
System.out.println(" 胜利加一分,否则不加分 ");
System.out.println(" 当游戏结束时分高者为胜 ");
System.out.println("==============================");
Scanner shuzi = new Scanner(System.in); //用户通过键盘输入
System.out.println("是否要开始游戏?"+"\n"+" y/n");
String m = shuzi.next();
while(m.equals("y")) {
System.out.println("请选择数字出拳:");
System.out.println("1 石头 2 剪刀 3 布");
int A = shuzi.nextInt(); //利用switch语句,用户实现出拳
switch(A){
case 1:
System.out.println("我出拳: 石头");
break;
case 2:
System.out.println("我出拳: 剪刀");
break;
case 3:
System.out.println("我出拳: 布");
break;
}
int B = (int)((Math.random()*10)%3 + 1); //电脑产生随机数,进行出拳
switch(B){
case 1:
System.out.println("电脑出拳: 石头");
break;
case 2:
System.out.println("电脑出拳: 剪刀");
break;
case 3:
System.out.println("电脑出拳: 布");
break;
}
if(A==B){ //一局游戏判断输赢的过程
System.out.println("哎呦,平局!再努力! ");
z++;
}
else if(((A==1)&(B!=3))||((A==2)&(B!=1))||((A==3)&(B!=2))){
System.out.println("不错嘛,赢了!");
x++;
z++;
}
else{
System.out.println("唉,输了,得加油啊!");
y++;
z++;
}
System.out.println("\n");
System.out.println("有种再来一局"+"\n"+"y/n");
m = shuzi.next();
}
System.out.println("游戏结束" );
System.out.println("对战的次数为"+z);
System.out.println("你的分数:" +x);
System.out.println("电脑的分数:"+y);
if(x>y){ //最终比游戏结果的判断
System.out.println("噢耶!完胜电脑!");
}
else if(x==y){
System.out.println("彼此彼此,水平相当么~");
}
else{
System.out.println("不幸输了,改日再和你较量!");
}
}
1、问题分析过程:
人机猜拳:人可以通过选择出拳,通过键盘输入相应数字来实现,这用到Java中的Scanner类;
电脑则随机性出拳,由电脑产生随即数来实现,用到 Math.random() 方法; //Math.random():产生一个[0,1)之间的随机数
通过游戏规则判断双方的输赢,显示当局的输赢情况,并记录当局的分数,并各方的输赢情况。游戏结束时显示双方的分数以及输赢情况;
定义x,y,变量,分别记录双方的分数;
定义变量y来记录双方对战的次数。
2、遇到的问题
(1)在编译源文件时,出现了这么个问题
这是一个编码的问题。Java中采用Unicode字符编码,而选用UTF-8或UTF-16,而非GBK编码。我们也用命令行来编译java文件时,由于编码格式的问题,这种时候就会出现错误编码 GBK 的不可映射字符。我们用的命令行敲的java命令默认是用本机的编码格式,所以才出现了GBK这个字眼。解决这个问题当然是指定在编译时的编码格式。
(2)还遇到一个问题,java源文件能成功的通过编译。但是,当执行java命令时,出现了“错误:找不到或无法加载主类”的问题。既然编译时成功了,说明语法是没有错误的。检查了下环境变量,发现路径配置并没有完全正确。在classpath和path的变量值上,%java_home%\lib\dt.jar;%java_home%\lib\tools.jar以及%java_home%\bin语句前都没有“. ;”符号,因此执行java命令时,无法执行,出现了“错误:找不到或无法找到主类”这样的问题。添加符号后,程序可正常执行。
下面是运行结果:
心得体会
1.通过对猜拳游戏的编写,深刻认识到了Java面向对象这一重要思想;
2.编译过程中,环境变量的设置,是很重要的。了解的PATH、CLASSPATH的作用;
3.写代码的过程必须仔细,经常由于不细心导致代码出错;
4.应该多学多写多练,在实践中熟悉应用代码。
/*Math.random():
产生一个[0,1)之间的随机数;
public class m{
public static void main(String args[]){
int a=10;
int b=0;
while(b<=a){
System.out.println(Math.random());
b++;
}
}
}
返回指定范围的随机数(m-n之间)的公式:Math.random()*(n-m)+m。
public class m{
public static void main(String args[]){
int a=10;
int b=0;
while(b<=a){System.out.println(Math.random()*(10-5)+5);
b++;
}
}
}
*/