JAVA人机互动版猜拳游戏

一、项目名称
人机互动版猜拳游戏
二、项目描述
1.玩家介绍
1)玩家的对手是电脑。
2)电脑的角色有:深蓝、银河、天河。
3)玩家的角色有:刘备、孙权、曹操。
2.游戏规则
1)出拳可以是石头、剪刀、布。
2)每次由玩家先出,电脑后出。
3)石头赢剪刀,剪刀赢布,布赢石头。
3.程序要求
1)程序运行时,显示欢迎信息,如图1。提醒玩家选择对手和自己的角色,而后显示游戏开始。

图1:
图1
2)玩家出拳后,电脑通过随机数出拳,并显示双方出拳信息。自动判断结果后,都要提醒用户,显示:是否要继续玩?(yes/no)。如果用户输入yes,则自动进入新一轮游戏,否则显示对战结果。如图2、图3、图4。

图2:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
图2
图3:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
图3
图4:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
图4
3)玩家在选择对手、角色和出拳时,数字必须是1至3的数,否则显示相关信息,并提示重新选择。如图5。

图5:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
图5
以上便是老师给的题目

感觉我们老师对初学者还是很不友好的,哈哈。
一步一步来:

  1. 声明一些需要的变量(这部分我也不是一开始就写好的,而是写到哪需要什么变量,再在前面做声明)
//	声明对手名称变量
	private static String enemyName = null;
//	声明我的名称变量
	private static String myName = null;
//	声明对手号码
	private static int enemy = 0;
//	声明我的号码
	private static int me = 0;
//	计数器:游戏次数
	private static int beginTimes = 0;
//	计数器:玩家赢次数
	private static int playerVictoryTimes = 0;
//	计数器:电脑赢次数
	private static int computerVictoryTimes = 0;
//	计数器:和局次数
	private static int noVictoryTimes = 0;
	
//	定义Scanner变量
	static Scanner sc = new Scanner(System.in);
//	定义Random变量
	static Random r = new Random();
  1. 做一个打印表头的方法
public static void printBiaoTou() {
		System.out.println("------------欢迎进入游戏世界------------");
		System.out.println("**************猜拳开始**************");
	}
  1. 出拳规则以及选择角色
public static void choose() {
		System.out.println("出拳规则:1.石头 2.剪刀 3.布");
		System.out.print("请选择对手(1:深蓝 2:银河 3:天河):");
		enemy = sc.nextInt();
//		判断用户选择的是否在1-3内
		if(enemy>3 || enemy<1) {
			while(true) {
				System.out.println("请输入1-3的数字");
				System.out.print("请重新选择对手(1:深蓝 2:银河 3:天河):");
				enemy = sc.nextInt();
				if(enemy>3 || enemy<1) {
					continue;
				}else {
					break;
				}
			}
		}
		System.out.print("请选择角色(1:刘备 2:孙权 3:曹操):");
		me = sc.nextInt();
		if(me>3 || me<1) {
			while(true) {
				System.out.println("请输入1-3的数字");
				System.out.println("请重新选择角色(1:刘备 2:孙权 3:曹操):");
				me = sc.nextInt();
				if(me>3 || me<1) {
					continue;
				}else
					break;
			}
		}
//		定义String类型变量,存储选择的角色
//		多分支,根据用户选择的不同,给的String值不同
		switch(enemy) {
		case 1:
			enemyName = "深蓝";
			break;
		case 2:
			enemyName = "银河";
			break;
		case 3:
			enemyName = "天河";
			break;
		}
		switch(me) {
		case 1:
			myName = "刘备";
			break;
		case 2:
			myName = "孙权";
			break;
		case 3:
			myName = "曹操";
			break;
		}
		System.out.println("游戏开始...");
	}

4.电脑随机出拳,并判断胜负方法

 	public static void computerChuQuan() {
		beginTimes++;
		String[] shitou = {"石头","剪刀","布"};
//		随机数给索引
		int i = r.nextInt(3);
		System.out.println(shitou[i]);
//		System.out.println(me);
//		System.out.println(i);
		/*
		 * 玩家赢:玩家石头1,电脑剪刀1;玩家剪刀2,电脑布2;玩家布3,电脑石头0
		 * 电脑赢:玩家石头1,电脑布2;玩家剪刀2,电脑石头0;玩家布3,电脑剪刀1
		 * else:平局
		 */
		if((me==1 && i==1)||(me==2 && i==2)||(me==3 && i==0)) {
			System.out.println("恭喜"+myName+"你赢了");
			playerVictoryTimes++;
		}
		else if((me==1 && i==2)||(me==2 && i==0)||(me==3 && i==1)) {
			System.out.println(enemyName+"赢了!");
			computerVictoryTimes++;
		}
		else {
			System.out.println("和局,"+myName+"加油啊!");
			noVictoryTimes++;
		}
	}

5.是否继续游戏方法(因为涉及到对前面代码的循环,我写在main方法里面)

		while(true) {
//		3.玩家出拳方法
		chuQuan();
//		4.电脑出拳方法
		computerChuQuan();
//		5.是否继续方法
		System.out.println("是否继续玩?(yes/no):");
//		输入yes/no
		String s = sc.next();
//		若用户不输入yes也不输入no
		while(true) {
			if(!(s.equals("yes") || s.equals("no"))) {
				System.out.println("请重新输入(yes/no):");
				s = sc.next();
				if(!(s.equals("yes") || s.equals("no"))) {
					continue;
				}
			}break;
		}
		if(s.equals("yes"))
			continue;
		else if(s.equals("no")) 
			break;
		}

这部分需要注意的循环的内容,仔细读题,清楚它有哪些部分需要循环就OK啦。

6.统计结果方法

public static void jieguo() {
	System.out.println("**************************");
	System.out.println("\t"+myName+"\t"+"vs"+"\t"+enemyName);
	System.out.println("对战次数:"+beginTimes);
	System.out.println(myName+"赢的次数:"+playerVictoryTimes);
	System.out.println(enemyName+"赢的次数:"+computerVictoryTimes);
	System.out.println("和局赢的次数:"+noVictoryTimes);
	if(playerVictoryTimes>computerVictoryTimes)
		System.out.println("本次对战的赢家是【"+myName+"】");
	else if(playerVictoryTimes<computerVictoryTimes)
		System.out.println("本次对战的赢家是【"+enemyName+"】");
	else
		System.out.println("本次对战,没有分出胜负,下次再战!");
	System.out.println("**************************");
}

7.总结:main方法

	public static void main(String[] args) {
//		1.打印表头
		printBiaoTou();
//		2.选择角色方法
		choose();
		while(true) {
//		3.玩家出拳方法
		chuQuan();
//		4.电脑出拳方法
		computerChuQuan();
//		5.是否继续方法
		System.out.println("是否继续玩?(yes/no):");
//		输入yes/no
		String s = sc.next();
//		若用户不输入yes也不输入no
		while(true) {
			if(!(s.equals("yes") || s.equals("no"))) {
				System.out.println("请重新输入(yes/no):");
				s = sc.next();
				if(!(s.equals("yes") || s.equals("no"))) {
					continue;
				}
			}break;
		}
		if(s.equals("yes"))
			continue;
		else if(s.equals("no")) 
			break;
		}
//		6.打印结果方法
		jieguo();
	}	

到这里这道程序就结束啦,感兴趣的小伙伴可以测一测哦,有什么问题可以私信我,大家一起学习
(其实这道题用面向对象来做会简单很多,但是这部分内容老师还没讲到,我也只好跟着老师来)

写博客的主要目的是记录自己在学习编程的路上踩到的一些坑,如果能帮助到初学者的话那是我的荣幸。大一时开始自学java,现在大二了,一路走来踩了不少的坑,却还没有自己的报错收藏,惭愧!大二学校也开了java课,我就以老师给的一次作业来作为我的博客的第一篇文章吧(此时老师刚刚讲完Random随机数,我的作业也基本上是用老师目前所教的内容来完成的)

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值