本文目錄一覽:
- 1、求c語言編程九個格子三子棋,可以對着下棋,而且還可以判斷輸贏
- 2、c語言程序設計—三子棋(相當於五子棋的小遊戲)
- 3、用C語言設計一個“三子棋”的遊戲,要求用上下左右光標控制。要程序源代碼!
- 4、求C語言高手指導!!!!!二維數組類似三子棋的簡單問題!!!
求c語言編程九個格子三子棋,可以對着下棋,而且還可以判斷輸贏
#includestdio.h
int main()
{
void picture(char a[3][3]);
int Osheng(char a[3][3]);
int Xsheng(char a[3][3]);
int ping(char a[3][3]);
int i,j,x,y;
char a[3][3];
for(i=0;i3;i++)
for(j=0;j3;j++)
a[i][j]=’ ‘;
picture(a);
while(1)
{
int a1=1;
while(1)//下X子
{
for(;a1;)
{
printf(“請輸入O子下的位置: “);//輸入o子的位置
scanf(“%d%d”,x,y);
if(a[x][y]==’O’||a[x][y]==’X’)//判斷是否已有子
{
printf(“已有子請重下”);
continue;
}
else if(x=3||y=3)
{
printf(“輸入錯誤請重輸”);
continue;
}
else
{
a[x][y]=’O’;
a1=0;
}
break;
}
break;
}
picture(a);//下好O子後將棋盤顯示
if(Osheng(a))
{
printf(“O子獲勝”);
break;
}
while(1)//下X子
{
printf(“請輸入X子下的位置: “);//輸入O子的位置
scanf(“%d%d”,x,y);
if(a[x][y]==’O’||a[x][y]==’X’)//判斷是否已有子
{
printf(“已有子請重下”);
continue;
}
else if(x=3||y=3)
{
printf(“輸入錯誤請重輸”);
printf(“請輸入X子下的位置: “);
scanf(“%d%d”,x,y);
continue;
}
a[x][y]=’X’;
break;
}
picture(a);
if(Xsheng(a))
{
printf(“X子獲勝”);
break;
}
if(ping(a))
{
printf(“平局”);
break;
}
}
int Osheng(char a[3][3])
{
int i,j;
for(i=0;i3;i++)
for(j=0;j3;j++)
if(a[i][j]==’O’a[i][j+1]==’O’a[i][j+2]==’O’)
return 1;
for(i=0;i3;i++)
for(j=0;j3;j++)
if(a[i][j]==’O’a[i+1][j]==’O’a[i+2][j]==’O’)
return 1;
if(a[1][1]==’O’a[2][2]==’O’a[3][3]==’O’)
return 1;
if(a[1][3]==’O’a[2][2]==’O’a[3][1]==’O’)
return 1;
return 0;
}
int Xsheng(char a[3][3])【就是在這裡錯的】
{
int i,j;
for(i=0;i3;i++)
for(j=0;j3;j++)
if(a[i][j]==’X’a[i][j+1]==’X’a[i][j+2]==’X’)
return 1;
for(i=0;i3;i++)
for(j=0;j3;j++)
if(a[i][j]==’X’a[i+1][j]==’X’a[i+2][j]==’X’)
return 1;
if(a[1][1]==’X’a[2][2]==’X’a[3][3]==’X’)
return 1;
if(a[1][3]==’X’a[2][2]==’X’a[3][1]==’X’)
return 1;
return 0;
}
int ping(char a[3][3])
{
int i,j;
for(i=0;i3;i++)
for(j=0;j3;j++)
{
if(a[i][j]==’ ‘)
return 0;
}
return 1;
}
void picture(char a[3][3])
{
printf(“%c|%c|%c\n”,a[0][0],a[0][1],a[0][2]);
printf(“-+-+-\n”);
printf(“%c|%c|%c\n”,a[1][0],a[1][1],a[1][2]);
printf(“-+-+-\n”);
printf(“%c|%c|%c\n”,a[2][0],a[2][1],a[2][2]);
}
c語言程序設計—三子棋(相當於五子棋的小遊戲)
首先你要知道學這些只是說明你是計算機專業的.五子棋並不是什麼大型項目開發,只是一個算法的實現而已.如果你的C有夠熟練,寫一個五子棋算法很簡單
你可以先在網上搜一下五子棋的算法,按他寫的思路寫一個程序出來,之後可以自己想想如何實現
用C語言設計一個“三子棋”的遊戲,要求用上下左右光標控制。要程序源代碼!
#include iostream
#include string
using namespace std;
class CGobang //棋子類
{
private:
char chSort; //棋子的類別
int nWin; //贏棋的次數
int nLose; //輸棋的次數
static int nDraw; //平局次數
static char achBoard[3][3]; //棋盤
static int nSize; //棋盤的尺寸 nSize X nSize
public:
CGobang(char chsort) //構造函數,決定一方棋子的類別
{
chSort=chsort;
nWin=nLose=nDraw=0;
}
void PlayTurn(void); //走1步棋
int Judge(); //判斷是否連成一線,是則返回1,否則返回0
void Win(void); //贏棋
void Lose(void); //輸棋
static void Draw(void); //平局
void PrintInfo(void); //輸出總體情況
static void PrintBoard(void); //輸出棋盤
static int GetFull(void); //判斷棋盤是否已布滿棋子
static void InitialBoard(void); //初始化棋盤
};
char CGobang::achBoard[3][3];
int CGobang::nSize = 3;
int CGobang::nDraw = 0;
void CGobang::Draw()
{
cout “\n\n\t\t平局!\n\n”;
nDraw++;
}
void CGobang::InitialBoard() //初始化棋盤
{
for(int i=0;inSize;i++)
for(int j=0;jnSize;j++)
achBoard[i][j]=’ ‘;
}
void CGobang::PrintBoard() //輸出棋盤
{
cout endl;
cout ” 1 2 3 ” endl;
cout “1 ” achBoard[0][0] ” | ” achBoard[0][1] ” | ” achBoard[0][2] endl;
cout ” —|—|—” endl;
cout “2 ” achBoard[1][0] ” | ” achBoard[1][1] ” | ” achBoard[1][2] endl;
cout ” —|—|—” endl;
cout “3 ” achBoard[2][0] ” | ” achBoard[2][1] ” | ” achBoard[2][2] endl;
cout endl;
cout endl;
}
int CGobang::GetFull() //判斷棋盤是否布滿棋子,若是返回1
{
for(int i=0;inSize;i++)
for(int j=0;jnSize;j++)
if(achBoard[i][j]!=’ ‘)
return 0;
return 1;
}
void CGobang::Win() //贏棋
{
cout “\n\n\t\t”chSort”方獲勝!\n\n”;
nWin++;
}
void CGobang::Lose() //輸棋
{
nLose++;
}
void CGobang::PlayTurn(void) //走1步棋
{
int nRow,nCol;
cout “現在該 “chSort” 方下棋,請輸入棋盤坐標(x,y):”;
do
{
cin nRow nCol; //輸入坐標
if(nRownSize || nColnSize) //判斷坐標越界
cout “輸入的坐標越界,x與y的範圍應小於等於”nSize”,請重新輸入\n”;
else if(achBoard[nRow-1][nCol-1]!=’ ‘) //判斷坐標合理
cout “棋盤(“nRow ” ,”nCol “)處已有棋子,請重新輸入\n”;
else
{
achBoard[nRow-1][nCol-1]=chSort; //在坐標處放上棋子
break; //退出循環
}
}while(1);
}
int CGobang::Judge() //判斷是否棋子連成一線,若是返回1
{//以下是各種可能連成一線的情況
if(achBoard[0][0]==chSort achBoard[1][1]==chSort achBoard[2][2]==chSort)
return 1;
else if(achBoard[2][0]==chSort achBoard[1][1]==chSort achBoard[0][2]==chSort)
return 1;
else if(achBoard[0][0]==chSort achBoard[1][0]==chSort achBoard[2][0]==chSort)
return 1;
else if(achBoard[0][1]==chSort achBoard[1][1]==chSort achBoard[2][1]==chSort)
return 1;
else if(achBoard[0][2]==chSort achBoard[1][2]==chSort achBoard[2][2]==chSort)
return 1;
else if(achBoard[0][0]==chSort achBoard[0][1]==chSort achBoard[0][2]==chSort)
return 1;
else if(achBoard[1][0]==chSort achBoard[1][1]==chSort achBoard[1][2]==chSort)
return 1;
else if(achBoard[2][0]==chSort achBoard[2][1]==chSort achBoard[2][2]==chSort)
return 1;
else
return 0; //沒有連成一線則返回0
}
void CGobang::PrintInfo(void) //打印總體情況
{
cout “Side “chSort”方共計贏 “nWin” 局,輸 “nLose” 局,平 “nDraw” 局。”endl;
}
void PrintRule(void) //打印規則
{
cout “\t\t歡迎使用三子連珠遊戲!” endl endl;
cout “\t遊戲規則:” endl;
cout “\t1.每1步輸入要下棋的格子的x,y坐標,按Enter鍵\n”;
cout “\t2.有1方首先3個棋子連成一線即判獲勝\n”;
cout “\t3.當棋子布滿棋盤但仍無獲勝方即為平局\n”;
cout “\t4.X方先行\n”;
cout “\n\n\t\t請按任意鍵開始下棋!\n\n”;
}
int JudgePlay(CGobang SideX,CGobang SideO) //每下1步要進行輸贏的判斷,有結果則返回1
{
if(SideX.Judge()) //X方獲勝
{
SideX.Win();
SideO.Lose();
return 1;
}
else if(SideO.Judge()) //O方獲勝
{
SideO.Win();
SideX.Lose();
return 1;
}
else
return 0;
}
void Play(CGobang SideX,CGobang SideO) //開始一局遊戲
{
while(1)
{
CGobang::PrintBoard(); //輸出棋盤
SideX.PlayTurn(); //X方下棋
if(JudgePlay(SideX,SideO)) //判斷輸贏
break;
if(CGobang::GetFull()) //判斷是否平局
{
CGobang::Draw();
break;
}
CGobang::PrintBoard(); //輸出棋盤
SideO.PlayTurn(); //O方下棋
if(JudgePlay(SideX,SideO)) //判斷輸贏
break;
if(CGobang::GetFull()) //判斷是否平局
{
CGobang::Draw();
break;
}
}
}
int main(void)
{
CGobang SideX(‘X’),SideO(‘O’); //定義兩個棋子類對象,分別代表X方與O方
PrintRule();
cin.get();
string strChoice;
do
{
CGobang::InitialBoard(); //初始化棋盤
Play(SideX,SideO); //開始下一局
cout “是否繼續(Y/N)?”;
cin strChoice;
}while(strChoice == “Y” || strChoice == “y”);
SideX.PrintInfo();
SideO.PrintInfo();
cout “\n\n\t歡迎再次使用三子連珠遊戲!” endl endl;
return 0;
}
求C語言高手指導!!!!!二維數組類似三子棋的簡單問題!!!
很明顯算法有問題。對於你這個題,你可以2個for()循環來做,
思想:
1,選對角線的元素來進行比較。
2,對每一個元素的時候 ,也就是a[0][0], 就把它和a[0][0],a[0][1],a[0][2]比較且相等的個數存在row_sum 中,同理把它和a[0][0],a[1][0],a[2][0]比較且相等的個數存在col_sum中。
3,如果在比較的過程中有不等的,不用本次(也就是這一行,或是這一列的比較)進行下一個對角線元素的比較。
4,查col_sum,row_sum 輸出結果。
// 程序沒有運行,直接在這打的,有問題再說,我的想法就是這樣的。
#define MAX 3
int winner (int matrix[MAX][MAX]){
int col_sum,row_sum ;
for(int i = 0; i MAX ; i++)
{
row_sum = col_sum = 0;
for(int j = 0; j MAX ; j++)
{
if(matrix[i][i] == matrix[i][j])
{
row_sum ++;
}
else if(matrix[i][i] == matrix[j][i]
{
col_sum ++;
}
else
break;
}
if( col_sum == MAX || row_sum == MAX ) //說明有勝利的。
printf(“%d is the winner\n”,matrix[i][i]);
else
printf(“No winner\n”);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/186491.html