制作該遊戲需要用到數組的相關知識,包括數組的設定、排列方式等。我們的這個遊戲就是要将一個三行三列的數組制作成三子棋的棋盤,玩家下一棋打印一次判斷是否達到勝利條件,然後電腦下一棋打印一次判斷是否達到勝利條件,了解了具體的步驟之後,我們就可以将整體的框架搭建起來:
#include"game.h"
void menu()
{
printf("**************************\n");
printf("******1.play 0.exit****\n");
printf("**************************\n");
}
//遊戲的算法實現
void game()
{
int ret = 0;
//數組存棋盤信息
char board[ROW][COL] = { 0 };
//初始化棋盤
InitBoard(board,ROW,COL);
//打印棋盤
DisplayBoard(board,ROW,COL);
//下棋
/*ComputerMore(board, ROW, COL);*/
//電腦下棋
while (1)
{
//玩家下棋
PlayerMove(board,ROW,COL);
//打印棋盤
DisplayBoard(board, ROW, COL);
//判斷是否勝利
ret = IsWin(board,ROW,COL);
if (ret != 'C')
{
break;
}
//電腦下棋
ComputerMore(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");
}
}
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("退出遊戲");
break;
default:
printf("選擇錯誤,重新選擇:>");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
将整體框架構建完成之後,我們在繼續遊戲主體的編譯,我們在創立一個源文件來存放遊戲主體算法的内容,首先先對棋盤進行初始化,并将棋盤打印,玩家需要輸入坐标來達到下棋的目的,比如第一行第一列我們輸入1 1,第二行第二列我們輸入2 2,如果輸入的坐标上已經被占用系統會提示”被占用“當電腦或者玩家完成三子連線的情況時,遊戲勝利或失敗,否則則為平局。具體代碼如下:
#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 )
{
int j = 0;
for (j = 0; j < col; j )
{
printf(" %c ", board[i][j]);
if (j < col - 1)
printf("|");
}
printf("\n");
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);
//判斷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("坐标不合理,請重新輸入");
}
}
}
void ComputerMore(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;
}
}
}
int IsFull(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 )
{
if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
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[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' ')
return board[2][0];
//判斷是否平局
if (1 == IsFull(board, ROW, COL))
{
return 'Q';
}
return 'C';
}
至此三子棋的全部内容編譯完成,在創立一個頭文件game.h來聲明函數的應用。
#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 ComputerMore(char board[ROW][COL], int row, int col);
char IsWin(char board[ROW][COL], int row, int col);
int IsFull(char board[ROW][COL], int row, int col);
//四種狀态:
//玩家赢 --*
//電腦赢 --#
//平局 --Q
//繼續 --C
有若幹隻雞兔同在一個籠子裡,從上面數,有35個頭,從下面數,有94隻腳。問籠中各有多少隻雞和兔?
思路分析:(頭總數-雞的頭數)x 4 雞的頭數x2=94
代碼示例:
#include "stdio.h"
int main()
{
int Rabbit,Chick;
printf("雞兔同籠問題:\n");
for(Chick=0;Chick<35;Chick )
{
for(Rabbit=9;Rabbit<35;Rabbit ){
if(Chick*2 Rabbit*4==94 && Chick Rabbit ==35 ){
printf("雞的數量為%d 兔子的數量為%d\n",Chick,Rabbit);
}
}
}
return 0;
}
另外,對于準備學習C/C 編程的小夥伴,如果你想更好的提升你的編程核心能力(内功)不妨從現在開始!
編程學習書籍分享:
編程學習視頻分享:
整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!