文章目錄
- 思維導圖
- 大綱
- 宣告
- 棋盤
- 代碼
- 主函式
- 主函式呼叫的test函式
- 選單函式
- 游戲Game函式
- 游戲Game.h頭檔案
- 游戲Game.c 各種函式的實作
- 初始化棋盤-
- 列印棋盤-
- 兩個控制
- 玩家走-
- 電腦走-
- 游戲狀態判斷-
- 棋盤滿不滿-
- 回頭看Game函式
- 游戲畫面
- GG.
思維導圖

大綱

宣告
- 頭檔案放函式的宣告
- .c檔案放函式的實作
- 咱們的.c檔案放
main函式 - 游戲狀態判斷 用的 字符,可以自定義
- 玩家的子兒用 *
- 電腦的子兒用 #
- 游戲繼續 用 C
- 平局用 Q
棋盤
代碼
主函式
int main()
{
test();
return 0;
}
主函式呼叫的test函式
void test()
{
int input = 0;
srand((unsigned int)time(NULL));//從程式開始就生成亂數
do
{
menu();
printf("請選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯誤,請重新選擇!\n");
break;
}
} while (input);
}
選單函式
void menu()
{
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("---- 1.play 0.exi---\n");
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
}
游戲Game函式
void game()
{
char ret = 0;
陣列-存放棋盤的資訊,
char board [ROW][COL] = { 0 };
初始化棋盤,初始化陣列,行,列陣列傳參,
Initboard(board,ROW,COL);
列印棋盤,
Displayboard(board,ROW,COL);
下棋 但凡只要不是繼續下的狀態就 break,跳出回圈,
while (1)
{
玩家下棋
Playermove(board, ROW, COL);
Displayboard(board, ROW, COL);
判斷玩家是否贏
ret=iswin(board, ROW, COL);
if (ret != 'C')
{
break;
}
電腦下棋,
computermove(board, ROW, COL);
Displayboard(board, ROW, COL);
電腦是否贏
ret=iswin(board, ROW, COL);
if (ret != 'C')
{
break;
}
}
根據上面的回傳 字符 進行判斷,
if (ret == '*')
{
printf("玩家贏\n");
}
else if (ret == '#')
{
printf("電腦贏\n");
}
else
{
printf("平局\n");
}
}
游戲Game.h頭檔案
#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 3 方便更換更大的棋盤
#define COL 3
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
函式的宣告,
初始化棋盤,
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);
iswin函式
玩家贏, 回傳 *
電腦贏 回傳 #
平局 回傳Q
繼續 回傳 C 要回傳這樣的字符所以用char型別
char iswin(char board[ROW][COL], int row, int col);
游戲Game.c 各種函式的實作
初始化棋盤-
#include"game.h"
函式的實作,
void Initboard(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for ( j = 0; j < col; j++)
{
board[i][j] = ' '; 弄成字符空格 等會兒列印棋盤的時候好看,,
}
}
}
列印棋盤-
兩個控制
- 控制列的 | 最后一列不用列印
- 控制行的 — 最后一行不用列印
- 也就是

void Displayboard(char board[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++) 控制列印幾行,
{
1,列印一行的資料,
int j = 0;
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
2,列印分割行,
if (i < row - 1)
{
for ( j = 0; j < col; j++)
{
{
printf("---");
if (j < col - 1) 這里列印 | 是為了 和 一行上面的 | 連接起來
{
printf("|");
}
}
}
printf("\n");
}
}
}
玩家走-
void Playermove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf("玩家走:>");
while (1)
{
printf("請輸入要下的坐標");
scanf("%d%d", &x, &y);
進行坐標判斷是否合法--路人角度 下標都是 多一的,
if (x >=1 && x<=row && y>=1 &&y<=col)
{
if (board[x-1][y-1]==' ')
{
board[x - 1][y - 1] = '*';
break;
}
else
{
printf("該坐標被占用");
}
}
else
{
printf("坐標輸入非法,請重新輸入!\n");
}
}
}
電腦走-
- 亂數的呼叫
- 下完就break
void computermove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf("電腦走:>\n");
while (1)
{
x = rand() % row;//生成亂數
y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
游戲狀態判斷-
- 贏,輸,平局,繼續
- 誰贏:每行,每列,兩個對角線的判斷,- 那個坐標是啥字符,就回傳啥字符,
- 平局要寫一個判斷是否棋盤滿了的函式 IsFull
- 三種情況都不是就繼續下,
回傳字符 char
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][1] != ' ')
{
return board[i][1];
}
}
豎三列
for ( i = 0; i < col; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
{
return board[1][i];
}
}
兩個對角線得判斷
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
{
return board[1][1];
}
if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ')
{
return board[1][1];
}
要么平局,要么繼續
判斷是否平局,發現沒有人贏,然后棋盤又滿了,說明平局,
if (isfull(board, ROW, COL) == 1) 判斷滿了就回傳1
{
return 'Q';
}
return 'C';
}
棋盤滿不滿-
int isfull(char board[ROW][COL], int row, int col) //回傳1表示棋盤滿了,回傳0表示棋盤美滿,
{
int i = 0;
int j = 0;
for ( i = 0; i < row; i++)
{
for ( j = 0; j < col; j++)
{
if (board[i][j]==' ')
{
return 0;//棋盤沒滿,
}
}
}
return 1;
}
回頭看Game函式

游戲畫面


GG.
如果感覺海星,請一鍵三聯哦~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/280288.html
標籤:其他

