石头剪刀布游戏仅仅使用switch语句
万年历-仅仅使用方法调用和for循环
一个小游戏和一个简单的万年历的代码实现
5.1 一个简单的剪刀石头布小游戏
5.1.1 需求:实现以下界面
************************************************************ 欢迎XXX进入猜拳游戏 1.石头 2.剪刀 3.布 0.退出 ************************************************************ 请输入数字: /* 此时等待用户输入数字,每个数字代表不同的效果,整个程序只有当用户输入0时才可以退出 否则不允许停止程 序,当用户输入 1-3之间某个数字的时候,需要和电脑系统AI进行猜拳对比,并对用户输出反馈效果 查看如果做 1~3之间数据获取操作 */ ************************************************************ 欢迎XXX进入猜拳游戏 1.石头 2.剪刀 3.布 0.退出 ************************************************************ 请输入数字: 1 如果赢了 提示 恭喜你赢了 如果输了 提示 你输了 如果平局 提示 平局再来 //输入提示语句之后 需要再次显示 以下界面 ************************************************************ 欢迎XXX进入猜拳游戏 1.石头 2.剪刀 3.布 0.退出 ************************************************************ 请输入数字: /* 当用户输入0是,猜拳游戏结束,输出以下界面,需要打印谁玩的,完了多少局,赢了多少场,胜率是多少 */ 排行榜 ****************************************************************** 姓名 总局数 赢场 胜率 XXX 0 0 xx%
5.1.2 代码实现
- 提供程序必要的一些信息(记录游戏总局数,胜场数,储存玩家输入的数据,储存电脑输入的数据)
- 编写游戏核心(输出游戏界面,接受玩家输入数据,判断输赢)
- 注意输赢条件判断
package Case.Java; import java.util.Scanner; /** * @author yinying * @date 2023/1/8 13:49 */ public class RockPaperScissors { public static void main(String[] args) { //1.提供程序必要的一些信息 Scanner input = new Scanner(System.in); int STotal = 0;// 记录游戏的总局数 int SVictory = 0;//记录胜场 int player_choose = 0;//存储玩家输入的数据 int computer_choose = 0;//存储电脑输入的数据 //2.编写游戏核心 while (true){ //打印输出的游戏界面 System.out.println(" ************************************************************"); System.out.println("欢迎进入猜拳游戏"); System.out.println("1石头 2.剪刀 3.布 0.退出"); System.out.println(" ************************************************************"); System.out.println("请输入数字:"); //接受用户输入数据 player_choose = input.nextInt(); //提供判断操作,因为用户输入0的时候退出程序 if (player_choose == 0){ //退出游戏打印排行榜界面 System.out.println("\t\t\t\t\t\t\t\t\t\t排行榜"); System.out.println("************************************************************"); System.out.println("姓名"+"\t\t\t总局数"+"\t\t\t赢场"+"\t\t\t胜率"); System.out.println("大宝"+"\t\t\t"+STotal+"\t\t\t"+SVictory+"\t\t\t"+ (((((double)SVictory)/((double)STotal)))*100)+"%"); break;//结束死循环让程序结束 } //如果玩家输入的不是0,证明玩家输入应该是【1,2,3】中间的一个值,所以总局数要+1 STotal++; /* 模拟电脑出拳 使用1,2,3 代表 石头、剪刀和布,模拟电脑出拳也应该是【1,2,3】之间的一个值 Java中提供一个操作---随机数---工具类Math这个类中提供了一个方法random random这个方法可以得到一个随机数据,但是这个随机数的初始范围是[0,1) 左闭右开区间 包括0,但是不包括1 [0,3)+1-->[0+1,3+1)--->[1,4) -->范围 得到1~3之间但是不包含4 */ computer_choose = ((int)Math.random()*3+1); // switch (computer_choose){ case 1: System.out.println("电脑出拳是:石头"); break; case 2: System.out.println("电脑出拳是:剪刀"); break; case 3: System.out.println("电脑出拳是:布"); break; } /* 如何判断输赢? 明确:玩家使用数字代表 石头、剪刀和布 【每一个出拳都是一个数字】 胜利条件 石头> 剪刀 剪刀>布 布> 石头 又因为输入都是数字,所以使用玩家输入数字与电脑所产生数据计算差值 1-2 = -1 2-3 = -1 3-1 = 2 只要计算差值得到-1和2就可以得到胜利 平局条件 石头 == 石头 剪刀 == 剪刀 布 == 布 又因为输入都是数字,所以使用玩家输入数字与电脑所产生数据计算差值 1-1 =0 2-2 =0 3-3 =0 只要计算差值得到0就是平局 现在胜利条件也出现,平局条件也出现,剩余条件就是失败 */ int win = player_choose-computer_choose; switch (win){ case - 1: case 2: System.out.println("恭喜,你赢了!!! (#^.^#)"); System.out.println("");//没有特殊意义就是好看 //胜场+1 SVictory++; break; case 0: System.out.println("平局,再来啊!!!!(*^▽^*)"); System.out.println(); break; default: System.out.println("你输了,还敢再来吗?O(∩_∩)O哈哈~"); System.out.println(); break; } } } }
5.1.2 代码实现
- 提供程序必要的一些信息(记录游戏总局数,胜场数,储存玩家输入的数据,储存电脑输入的数据)
- 编写游戏核心(输出游戏界面,接受玩家输入数据,判断输赢)
- 注意输赢条件判断
package Case.Java; import java.util.Scanner; /** * @author yinying * @date 2023/1/8 13:49 */ public class RockPaperScissors { public static void main(String[] args) { //1.提供程序必要的一些信息 Scanner input = new Scanner(System.in); int STotal = 0;// 记录游戏的总局数 int SVictory = 0;//记录胜场 int player_choose = 0;//存储玩家输入的数据 int computer_choose = 0;//存储电脑输入的数据 //2.编写游戏核心 while (true){ //打印输出的游戏界面 System.out.println(" ************************************************************"); System.out.println("欢迎进入猜拳游戏"); System.out.println("1石头 2.剪刀 3.布 0.退出"); System.out.println(" ************************************************************"); System.out.println("请输入数字:"); //接受用户输入数据 player_choose = input.nextInt(); //提供判断操作,因为用户输入0的时候退出程序 if (player_choose == 0){ //退出游戏打印排行榜界面 System.out.println("\t\t\t\t\t\t\t\t\t\t排行榜"); System.out.println("************************************************************"); System.out.println("姓名"+"\t\t\t总局数"+"\t\t\t赢场"+"\t\t\t胜率"); System.out.println("大宝"+"\t\t\t"+STotal+"\t\t\t"+SVictory+"\t\t\t"+ (((((double)SVictory)/((double)STotal)))*100)+"%"); break;//结束死循环让程序结束 } //如果玩家输入的不是0,证明玩家输入应该是【1,2,3】中间的一个值,所以总局数要+1 STotal++; /* 模拟电脑出拳 使用1,2,3 代表 石头、剪刀和布,模拟电脑出拳也应该是【1,2,3】之间的一个值 Java中提供一个操作---随机数---工具类Math这个类中提供了一个方法random random这个方法可以得到一个随机数据,但是这个随机数的初始范围是[0,1) 左闭右开区间 包括0,但是不包括1 [0,3)+1-->[0+1,3+1)--->[1,4) -->范围 得到1~3之间但是不包含4 */ computer_choose = ((int)Math.random()*3+1); // switch (computer_choose){ case 1: System.out.println("电脑出拳是:石头"); break; case 2: System.out.println("电脑出拳是:剪刀"); break; case 3: System.out.println("电脑出拳是:布"); break; } /* 如何判断输赢? 明确:玩家使用数字代表 石头、剪刀和布 【每一个出拳都是一个数字】 胜利条件 石头> 剪刀 剪刀>布 布> 石头 又因为输入都是数字,所以使用玩家输入数字与电脑所产生数据计算差值 1-2 = -1 2-3 = -1 3-1 = 2 只要计算差值得到-1和2就可以得到胜利 平局条件 石头 == 石头 剪刀 == 剪刀 布 == 布 又因为输入都是数字,所以使用玩家输入数字与电脑所产生数据计算差值 1-1 =0 2-2 =0 3-3 =0 只要计算差值得到0就是平局 现在胜利条件也出现,平局条件也出现,剩余条件就是失败 */ int win = player_choose-computer_choose; switch (win){ case - 1: case 2: System.out.println("恭喜,你赢了!!! (#^.^#)"); System.out.println("");//没有特殊意义就是好看 //胜场+1 SVictory++; break; case 0: System.out.println("平局,再来啊!!!!(*^▽^*)"); System.out.println(); break; default: System.out.println("你输了,还敢再来吗?O(∩_∩)O哈哈~"); System.out.println(); break; } } } }
5.2 万年历
5.2.1 需求 输入年份和月份,输出简单的万年历日历,如下
输入2022年1月 输出: 星期⽇ 星期⼀ 星期⼆ 星期三 星期四 星期五 星期六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
5.2.2 代码实现
- 输出提示语句,并接受⽤户输⼊的年,⽉
- 计算总天数
- 计算星期
- 格式化日历输出
- 打印格式表头
- 输出年份(需要注意是否是闰年)、月份、天数
package Case.Java; import java.util.Scanner; /** * @author:yinying * @date 2023/1/8 17:22 */ public class PerpetualCalendar { public static void main(String[] args) { //1.先输出提示语句,并接受⽤户输⼊的年,⽉ Scanner input = new Scanner(System.in); System.out.println("请输⼊年:"); int year = input.nextInt(); System.out.println("请输⼊⽉:"); int month = input.nextInt(); //2.计算总天数 int totalDaysY = getFormNowYearTo1900TotalDays(year); int totalDaysM = getNowYearToDays(year, month); //3.计算星期(对7求余 得到的记过就是0~6 0就是星期⽇ 1-6分别对应星期⼀到星期六) int week = (totalDaysM+totalDaysY+1)%7; //4.格式化打印⽇历 FormatCalendar(week, year, month); } /** * 格式化日历输出 * @param week 星期数 * @param year 年份 * @param month ⽉份 */ public static void FormatCalendar(int week,int year,int month) { //计数统计 int cut = 0; //打印表头 System.out.println("星期⽇\t星期⼀\t星期⼆\t星期三\t星期四\t星期五\t星期六\t\t"); //计算⽉份第⼀天是星期⼏(空格的位置) for(int i = 1 ;i<=week;i++) { System.out.print("\t\t"); cut++;//计数 } //通过获取⽉份对应天数,计算打印出⽇历表中天数 for(int i =1;i<=getNowMonthDays(year, month);i++) { //输出天数结果 System.out.print(i+"\t\t"); cut++;//计数 //这个计数的作⽤就在这⾥了,根据给的图⽚可以发现每⼀⾏打印的内容是7个,也就是逢7换⾏,所以只要能整除开7就换⾏ if(cut%7 == 0) { System.out.println(); } } } /** * 判断是否是润年 * @param year 年份 * @return true 是闰年 false 那不是闰年 */ public static boolean isLeapYear(int year) { return (year%4==0 && year%100!=0)||(year%400==0); } /** * 根据⽤户输⼊的⽉份来判断对应⽉份的天数 * @param year 年份 * @param month ⽉份 * @return 返回对应的天数 */ public static int getNowMonthDays(int year,int month) { switch(month) { case 2: return isLeapYear(year) ? 29 : 28; case 4: case 6: case 9: case 11: return 30; default: return 31; } } /** * 计算距离1900年1⽉1⽇的总天数 * @param year 年份 * @return 总天数 */ public static int getFormNowYearTo1900TotalDays(int year) { //定义变量存储总天数 int sum = 0; for(int i = 1900 ;i<year;i++) { sum += isLeapYear(i) ? 366 : 365; } return sum; } /** * 计算输⼊⽉份到当前年份1⽉1⽇的总天数 * @param year 年份 * @param month ⽉份 * @return 距离当前年份1⽉1⽇的总天数 */ public static int getNowYearToDays(int year,int month) { //定义变量存储总天数 int totalDays = 0; //计算距离1⽉1⽇的总天数 for(int i = 1; i<month;i++) { totalDays += getNowMonthDays(year, i); } return totalDays; } }
实现效果如下