注:本文出自dox-pro.iteye.com,为Dox.Pro原创,转载请注明出处!
刚好这两天学校搞实习,写了一个简单的搬山游戏的代码,也算看了两天java后的一个练手吧,代码没有什么难度,纯水,纯模拟!
题目描述
设有n座山,计算机与人作为比赛的双方,双方轮流搬山。规定每次搬山的数目不能超过k座,谁搬最后一座谁输。游戏开始时,计算机请人输入山的总数(n)和每次允许搬山的最大数目(k)。然后请人先开始,人输入了需要搬走的山的数目后,计算机马上输出它搬多少座山,并提示尚余多少座山。双方轮流搬山直到最后一座山搬完为止。计算机显示谁是赢家,并问人是否要继续比赛。若人不想玩了,可以输入山的总数为0,计算机便会告诉人共完了几局,双方胜负如何。
程序代码
// MountainGame.java
import java.util.*;
public class MountainGame {
private static int roundCount; // 记录局数
private static int computerWinCount; // 记录 电脑胜利局数
private static int humanWinCount; // 记录 人胜利局数
private static int n; // 总共山的个数
private static int k; // 每局最多移动山的个数
// 初始化函数
public static void init()
{
roundCount = 0;
computerWinCount = 0;
humanWinCount = 0;
n = k = 0;
}
// 读入函数
public static int readin()
{
int in_n, in_k;
System.out.println( "请输入山的 总数 和 每次最多搬动多少座山" );
Scanner cin = new Scanner(System.in);
in_n = cin.nextInt();
if ( in_n == 0 ) return 0; // 退出游戏
in_k = cin.nextInt();
while ( in_n < 0 || in_k <= 0 ) {
System.out.println( "输入有误,重新输入" );
Scanner cina = new Scanner(System.in);
in_n = cina.nextInt();
in_k = cina.nextInt();
}
n = in_n;
k = in_k;
return 1;
}
// 开始游戏函数
public static int play()
{
while ( n > 0 ) {
int cin_m;
System.out.println( "请输入要搬走的山数" );
Scanner cin = new Scanner( System.in );
cin_m = cin.nextInt();
while ( cin_m <= 0 || cin_m > n || cin_m > k ) {
System.out.println( "输入有误,请重新输入" );
Scanner cina = new Scanner( System.in );
cin_m = cina.nextInt();
}
n -= cin_m;
if ( n == 0 ) return 0; // 电脑赢
else if ( n == 1 ) return 1; // 人赢
else {
System.out.println( "你搬走山后还剩下 " + n + " 座山" );
if ( n > k ) {
System.out.println( "电脑搬走 " + k + " 座山" );
n -= k;
}
else {
System.out.println( "电脑搬走 " + ( n - 1 ) + " 座山" );
n -= ( n - 1 );
}
System.out.println( "电脑搬走山后还剩下 " + n + " 座山" );
}
} // end while
return 2;
}
// 检查胜负
public static void checkAndReport( int i )
{
if ( i == 1 ) {
System.out.println( "太棒了,你打败了电脑!" );
System.out.println();
humanWinCount++;
}
else if ( i == 0 ) {
System.out.println( "很遗憾,你输了!" );
System.out.println();
computerWinCount++;
}
}
// 打印输出
public static void report()
{
System.out.println( "游戏结束!" );
System.out.println( "共进行游戏 " + roundCount + " 局" );
System.out.println( "其中你赢了 " + humanWinCount + " 局\n" + "被电脑击败 " + computerWinCount + " 局" );
System.out.println();
}
public static void main( String args[] )
{
MountainGame.init();
while ( MountainGame.readin() != 0 ) {
MountainGame.checkAndReport( MountainGame.play() );
}
MountainGame.report();
System.exit( 0 );
}
}
附一个测试的结果
请输入山的 总数 和 每次最多搬动多少座山
21 4
请输入要搬走的山数
4
你搬走山后还剩下 17 座山
电脑搬走 4 座山
电脑搬走山后还剩下 13 座山
请输入要搬走的山数
4
你搬走山后还剩下 9 座山
电脑搬走 4 座山
电脑搬走山后还剩下 5 座山
请输入要搬走的山数
4
太棒了,你打败了电脑!
请输入山的 总数 和 每次最多搬动多少座山
32 19
请输入要搬走的山数
19
你搬走山后还剩下 13 座山
电脑搬走 12 座山
电脑搬走山后还剩下 1 座山
请输入要搬走的山数
1
很遗憾,你输了!
请输入山的 总数 和 每次最多搬动多少座山
88 20
请输入要搬走的山数
20
你搬走山后还剩下 68 座山
电脑搬走 20 座山
电脑搬走山后还剩下 48 座山
请输入要搬走的山数
19
你搬走山后还剩下 29 座山
电脑搬走 20 座山
电脑搬走山后还剩下 9 座山
请输入要搬走的山数
8
太棒了,你打败了电脑!
请输入山的 总数 和 每次最多搬动多少座山
31 13
请输入要搬走的山数
13
你搬走山后还剩下 18 座山
电脑搬走 13 座山
电脑搬走山后还剩下 5 座山
请输入要搬走的山数
4
太棒了,你打败了电脑!
请输入山的 总数 和 每次最多搬动多少座山
0
游戏结束!
共进行游戏 0 局
其中你赢了 3 局
被电脑击败 1 局
程序本身没什么,只是这种刚接触java后的新鲜感还没有散去,写一个小程序心里也很开心,所以就贴出来留个纪念吧!
分享到:
相关推荐
良葛格的Java学习笔记~讲解得非常详细。JDK5.0的~是Java入门的不错选择。
——————————————————————————————————————————————
Thinking in Java 自学笔记——第二章 一切皆对象 个人原创,不喜勿喷。
java学习笔记很适合初学者了解。看了一遍,觉得还行!所以拿上来分享。
Java JDK 6学习笔记——ppt简体版.rar
此资源为我跟着B站up主【遇见狂神说】java系列视频中前端入门部分学习过程中所写 大部分和视频保持一致,有一些自己的理解和一些扩展的部分
Java JDK 6学习笔记——ppt简体版加课本代码
Java JDK 6学习笔记——ppt简体版 第21章.ppt
Java JDK 6学习笔记——ppt简体版 第20章.ppt
Java JDK 6学习笔记——ppt简体版 第19章.ppt
Java JDK 6学习笔记——ppt简体版 第18章.ppt
Java JDK 6学习笔记——ppt简体版 第17章.ppt