1. 程式人生 > >Java練習用Java寫雙人遊戲簡單四子棋

Java練習用Java寫雙人遊戲簡單四子棋

為了應付Java老師,借鑑了同學思想,自己動手敲了一個四子棋遊戲。程式碼很不規範,為了趕時間。結果寫的和C語言一樣。原始碼在本文結尾處

首先看看遊戲規則,

遊戲規則

 四子棋的棋盤共有6行7列,棋盤是垂直襬放,每名玩者有21只圓形棋子,以不同顏色辨別。兩名玩者輪流每次把一隻棋子放進棋盤任何未全滿的一行中,棋子會佔據一行中最底未被佔據的位置。兩名玩者任何一方先以四隻棋子在橫,豎或斜方向聯成一條直線,便可獲勝,遊戲亦結束。假如棋盤已完全被棋子填滿,但仍未有任何一方成功把四隻棋子成一直線,則成為和局。

棋盤

用了一個二維陣列6*7的二維陣列來構造棋盤。每次選擇要下的行號行號即可。

isfour()

用來判斷下的棋有沒有連成四字,每次下完都判斷一次。

judge()

用來判斷所下的棋成功與否,即所下位置是否有棋和棋盤是否能放下

主要用了就這麼多,只建立了一個類connect類來建立一個四子棋遊戲。。。。

package connect;
import java.util.*;

public class connect
{
	public static  void main(String args[])
	{
		int start=0;
	
		int count=0;
		int count_max=42;
		connect_four one=new connect_four();
		
		one.display_board();
	
		do
		{
			System.out.println("請白子先行");
		
			Scanner in=new Scanner(System.in);
			int cow=in.nextInt();
			
			if(one.judge(cow, 1) == 1)
			{
				start=1;count++;
			}
			else
			{
				start=0;
			}
		}
		
		while(start==0);
		one.display_board();
		System.out.println();
		int color=2;
		do
		{
			//one.getcolor();
			
			System.out.println("對手出棋");
			Scanner in=new Scanner(System.in);
			//int raw=in.nextInt();
			int cow=in.nextInt();
			if(one.judge(cow,color)==0)
			{
				System.out.println("出棋失敗,請重新出棋");
			}
			else
			{
					count++;
					if(one.is_four(cow, color, 0, 1)==1)
					{
						if(color==1)
							System.out.print("\t\t\t\t圈圈");
						else
							System.out.print("\t\t\t\t叉叉");
						System.out.print("勝出\n");
						one.display_board();
						System.out.println();
						return ;
					}
					if(color==2)color=1;
					else color=2;
			}
			one.display_board();
			
		}
		while(count<count_max);
		if(count==count_max)
			{
				System.out.println("\t\t\t\t\t和局");
				one.display_board();
				System.out.println();
			}
		
	}



}


class  connect_four
{
	private int flag=0;				//
	private int max_i=6;			//最大行
	private int max_j=7;			//最大列
	private int row;				//行值
	private int cow;				//列值
	private int [] []chessboard_status=new int[6][7];//棋盤狀態
	private int [] a = new int[7];      			//列的行值
	private int chess_color;		//棋子顏色
	
	public connect_four() 			//建構函式初始化棋盤
	{
		flag=0;
		max_i=6;
		max_j=7;
		row=0;
		cow=0;
		for(int i=0;i<max_i;i++)
		{
			for(int j=0;j<max_j;j++)
			{
				a[j] = 5;
				chessboard_status[i][j]=0;
			}
		}
	}
	public int judge(int j,int color)
	{
		switch(j)
		{
			case 0:	 if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}//二維數            
                                                                                 //組存放
						else return 0;	
			case 1:	 if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
						else return 0;
			case 2:	 if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
			 			else return 0;
			case 3:	 if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
						else return 0;
			case 4:	 if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
			 			else return 0;
			case 5:	 if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
			 			else return 0;
			case 6:	 if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
			 			else return 0;
			default: ;
		}
		return 1;
	}
	public int judge_status(int i,int j)
	{
		if(i>-1&&i<max_i&&j>-1&&j<max_j)
			if(chessboard_status[i][j]==0)
				return 0;
			else if(chessboard_status[i][j]==1)
				return 1;//白色
			else
				return 2;//黑色
		else return -1;//位置輸入超框
	}
	public void getcolor()
	{
		if(flag==1)
			System.out.print("白棋");
		else
			System.out.print("黑棋");
		System.out.println("\n");
	}
	public void display_board()
	{
		char a=1;
		char b=0;
	
		
		System.out.print("  ");
			for(int j=0;j<max_j;j++)
			{
				System.out.print(j+" ");
			
		
			}
			System.out.println();
		
		for(int i=0;i<max_i;i++)
		{
			
			for(int j=0;j<max_j;j++)
			{
				if(j==0)
					System.out.print(i);
				switch(chessboard_status[i][j])
				{
				case 0: System.out.print(" *");break;
				case 1: System.out.print(" ○");break;
				case 2: System.out.print(" ×");break;
				}
			}
			System.out.println();
		}
		
	}
	public int is_four(int j,int color,int num,int direction)
	{
		int m=a[j]+1,n=j;
		do
		{
			switch(direction)
			{
			case 1: m=m+1;n=n;break;
			case 2:	m=m+1;n=n-1;break;
			case 3: m=m;n=n-1;break;
			case 4: m=m-1;n=n-1;break;
			case 5: m=m-1;n=n;break;
			case 6: m=m-1;n=n+1;break;
			case 7: m=m;n=n+1;break;
			case 8: m=m-1;n=n-1;break;
			default :break;
			
			}
			if(judge_status(m,n)==color)
			{
				num++;
				if(num==3)
				{
					return 1;
				}
			}
			else 
				{
					m=a[j]+1;
					n=j;
					num=0;
					direction++;
				}
		}while(direction!=9);
		if(num==3)	return 1;
		else return 0;
	}
}