C語言實現一條龍小遊戲
阿新 • • 發佈:2018-11-23
一條龍小遊戲
一、程式碼構思
全部程式碼分為三個檔案:game.h, game.c, text.c(game.h用來申明所有用到的函式,game.c用來寫實現遊戲的程式碼,text.c用來除錯程式碼)
第一步將棋盤初始化為空格;第二步列印棋盤;第三步設計由玩家先走(在棋盤中放入X),然後電腦走(在棋盤中放入*);第四步判斷輸贏,若有一方有三個相同的子連在一條直線上則贏了,另一方輸;若棋盤滿了也沒有三子連成一線,則為平局。
其中標頭檔案game.h
#ifndef __GAME_H__ #define __GAME_H__ #include <time.h> #include<stdio.h> #include <stdlib.h> #include<time.h> #define ROW 3//棋盤的行數 #define COL 3//棋盤的列數 void InitBoard(char board[ROW][COL], int row, int col);//初始化棋盤函式 void DisplayBoard(char board[ROW][COL], int row, int col);//列印棋盤函式 void PlayerMove(char board[ROW][COL], int row, int col);//玩家走函式 void ComputerMove(char board[ROW][COL], int row, int col);//電腦走函式 char IsWin(char board[ROW][COL], int row, int col);//判斷輸贏函式 #endif //__GAME_H__
二、遊戲介面構思
設計一個簡單的進入遊戲選單及棋盤
void menu()
{
printf("**************************************\n");
printf("************* 1.play ****************\n");
printf("************* 0.exit ****************\n");
printf("**************************************\n");//遊戲選單
}
選單效果
void DisplayBoard(char board[ROW][COL], int row, int col)//定義一個二維陣列輸出函式 { int i = 0; int j = 0; for (i = 0; i<row; i++) { //printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);有侷限性,遊戲無法擴充套件 for (j = 0; j<col; j++) { printf(" %c ", board[i][j]); if (j<col - 1) printf("|");//列印資料行 } printf("\n"); if (i<row - 1) { //printf("---|---|---\n"); for (j = 0; j<col; j++) { printf("---"); if (j<col - 1) printf("|");//列印分割行 } printf("\n"); } } }
void InitBoard(char board[ROW][COL], int row, int col)//定義一個二位數初始化函式
{
memset(&board[0][0], ' ', row*col*sizeof(board[0][0]));//記憶體設定函式,從二維陣列首地址開始將所有值賦‘ ’值
}
遊戲剛開始三子棋棋盤效果
三、遊戲程式碼實現
1.玩家走
void PlayerMove(char board[ROW][COL], int row, int col) { int x = 0; //定義兩個座標變數 int y = 0; printf("玩家走:>\n");//提示玩家走 while (1) { printf("請輸入走的座標(1-3):>"); scanf("%d%d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col)//判斷輸入座標的合法性,且遊戲面向大眾座標從1開始 { if (board[x - 1][y - 1] == ' ')//陣列座標從0開始,若為空格則可落子 { board[x - 1][y - 1] = 'X'; break;//只有輸入正確時才能跳出while(1)的死迴圈 } else { printf("座標被佔用,重新輸入!\n");//遊戲規則:已經有子則重新輸入 } } else { printf("座標有誤,重新輸入!\n"); } } }
2.電腦走
void ComputerMove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf("電腦走:>\n");//提示電腦走
while (1)
{
x = rand() % row;//rand()的範圍0-32767,取餘行列從而隨機生成座標;rand()需要呼叫srand()函式
y = rand() % col;
if (board[x][y] == ' ')//判斷是否被佔用
{
board[x][y] = '*';
break;
}
}
}
3.判斷遊戲輸贏
char IsWin(char board[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i<row; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2]
&& board[i][0] != ' ')
{
return board[i][0];
}
}
for (i = 0; i<col; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i]
&& board[0][i] != ' ')
{
return board[0][i];
}
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2]
&& board[1][1] != ' ')
{
return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0]
&& board[1][1] != ' ')
{
return board[1][1];
}
//判斷平局
if (IsFull(board, row, col) == 1)
{
return 'Q';
}
//遊戲繼續
return ' ';
}
4.遊戲效果