程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 03-02自底向上風格_模擬游戲

03-02自底向上風格_模擬游戲

編輯:C++入門知識

模擬游戲

模擬井字棋游戲

九個格子中雙方輪流落子。

其中一方畫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(); // 繼續走棋
		}
		
	}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved