Java人机猜拳游戏(命令行版)

这是本学期的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.编译过程中,环境变量的设置,是很重要的。了解的PATHCLASSPATH的作用;

    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++;
		}
	}
}


*/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NBITer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值