java学习笔记——“搬山游戏”的实现

[b][color=red]注[/color]:本文出自dox-pro.iteye.com,为Dox.Pro原创,转载请注明出处![/b]

刚好这两天学校搞实习,写了一个简单的搬山游戏的代码,也算看了两天java后的一个练手吧,代码没有什么难度,纯水,纯模拟!

[b]题目描述[/b]
设有n座山,计算机与人作为比赛的双方,双方轮流搬山。规定每次搬山的数目不能超过k座,谁搬最后一座谁输。游戏开始时,计算机请人输入山的总数(n)和每次允许搬山的最大数目(k)。然后请人先开始,人输入了需要搬走的山的数目后,计算机马上输出它搬多少座山,并提示尚余多少座山。双方轮流搬山直到最后一座山搬完为止。计算机显示谁是赢家,并问人是否要继续比赛。若人不想玩了,可以输入山的总数为0,计算机便会告诉人共完了几局,双方胜负如何。

[b]程序代码[/b]

// 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后的新鲜感还没有散去,写一个小程序心里也很开心,所以就贴出来留个纪念吧!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值