码迷,mamicode.com
首页 > 其他好文 > 详细

03-02自底向上风格_模拟游戏

时间:2014-05-04 00:17:10      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:java   编程   

模拟游戏

模拟井字棋游戏

九个格子中双方轮流落子。

其中一方画x符号,另一方画o符号。

开始时,9个格子都是空的。

程序显示当前局面,提示某一方输入落子位置,然后显示局面,再提示另一方。

当某方棋子连成直线,该方获胜!

例如:

初始:

_ _ _

_ _ _

_ _ _

o 输入位置: 1,1

o _ _

_ _ _

_ _ _

x 输入位置: 2,2

o _ _

_ x _

_ _ _

当某一方出现了3个棋子连成直线或对角线,则该方获胜

标准答案:

 
import java.util.*; 

class MyChess
{
	private char[][] data;  // 棋局
	private boolean side;  // 轮到哪方走棋 true: o方,false: x方
	private static Scanner scan = new Scanner(System.in);
	
	public MyChess()
	{
		data = new char[3][3];
		side = true;
	}
	
	public void show()
	{
		for(int i=0; i<3; i++)
		{
			for(int j=0; j<3; j++)
			{
				if(data[i][j]==0)
					System.out.print(‘_‘);
				else
					System.out.print(data[i][j]);
				
				System.out.print(" ");
			}
			System.out.println();
		}
	}
	
	public boolean isEnd()
	{
		//检查是否已经分出胜负
		if(judge()>0) return true;

		// 检查是否还能走下去		
		for(int i=0; i<3; i++)
		for(int j=0; j<3; j++)
		{
			if(data[i][j]==0) return false;
		}
		
		return true;
	}
	
	// 胜负裁判
	private int judge()
	{
		// 检测横线
		for(int k=0; k<3; k++)
		{
			if(data[k][0] == data[k][1] && data[k][0] == data[k][2])
			{
				if(data[k][0]==‘o‘) return 1;  // o 方胜利
				if(data[k][0]==‘x‘) return 2;  // x 方胜利	
			}
		}
		
		// 检测竖线
		for(int k=0; k<3; k++)
		{
			if(data[0][k] == data[1][k] && data[0][k] == data[2][k])
			{
				if(data[0][k]==‘o‘) return 1;  // o 方胜利
				if(data[0][k]==‘x‘) return 2;  // x 方胜利	
			}
		}
		
		// 检查斜线
		if(data[0][0]==data[1][1] && data[0][0]==data[2][2])
		{
			if(data[0][0]==‘o‘) return 1;  // o 方胜利
			if(data[0][0]==‘x‘) return 2;  // x 方胜利				
		}
		if(data[0][2]==data[1][1] && data[0][2]==data[2][0])
		{
			if(data[0][2]==‘o‘) return 1;  // o 方胜利
			if(data[0][2]==‘x‘) return 2;  // x 方胜利				
		}
		
		return 0;
	}
	
	// 显示比赛结果
	public void showResult()
	{
		switch(judge())
		{
			case 0:
				System.out.println("平局!");
				break;
			case 1:
				System.out.println(" o 方胜利!");
				break;
			case 2:
				System.out.println(" x 方胜利!");
				break;
		}	
	}
	
	public void play()
	{
		for(;;)
		{
			char side_char = side? ‘o‘ : ‘x‘;
				
			System.out.print( " " + side_char + " 请输入棋子位置(行,列):");
			String s = scan.nextLine();
			
			try
			{
				String[] ss = s.split(",");
				int row = Integer.parseInt(ss[0])-1;  // 行号
				int col = Integer.parseInt(ss[1])-1;  // 列号
				if(data[row][col]!=0) continue;  // 该位置已经有棋子
				data[row][col] = side_char;  // 记录落子
				side = !side;
				break;
			}
			catch(Exception e)
			{
			}
		}
	}
}
		
public class MyTest
{
	public static void main(String[] args)
	{
		// o x 填充游戏
		/*
		  初始:
		  _ _ _ 
		  _ _ _
		  _ _ _
	
		  o 输入位置: 1,1
		  o _ _ 
		  _ _ _
		  _ _ _
		  x 输入位置: 2,2
		  o _ _ 
		  _ x _
		  _ _ _
		  
		  当某一方出现了3个棋子连成直线或对角线,则该方获胜
		*/ 
		
		MyChess a = new MyChess();
		
		for(;;)
		{
			a.show();  // 显示局面
			if(a.isEnd())
			{
				a.showResult();
				break;
			}
			a.play(); // 继续走棋
		}
		
	}
}

03-02自底向上风格_模拟游戏,布布扣,bubuko.com

03-02自底向上风格_模拟游戏

标签:java   编程   

原文地址:http://blog.csdn.net/u012897654/article/details/24890487

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!