`
Dox.Pro
  • 浏览: 10988 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多
:本文出自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后的新鲜感还没有散去,写一个小程序心里也很开心,所以就贴出来留个纪念吧!
0
2
分享到:
评论
2 楼 Dox.Pro 2010-05-06  
liuwei8728 写道
记得当时写Java手机游戏时,也是很多地方用static  

我刚开始学习JAVA,还请多多指教呢!
1 楼 liuwei8728 2010-05-06  
记得当时写Java手机游戏时,也是很多地方用static  

相关推荐

Global site tag (gtag.js) - Google Analytics