C語言代碼實現(xiàn)三子棋小游戲
本文實例為大家分享了C語言實現(xiàn)三子棋小游戲的具體代碼,供大家參考,具體內(nèi)容如下
設計思路
三子棋的C語言設計的思路:
1.設計一個界面:讓玩家運行后即可以看到一個界面,而此時界面需要一個讓玩家選擇的語句,即可以選擇玩游戲或者退出操作。界面設計需要swich語句的實現(xiàn),退出游戲設計選項為0,即可以當選擇退出游戲時直接退出while(循環(huán)),即結束游戲。
2.游戲?qū)崿F(xiàn):當玩家選擇玩游戲時,調(diào)用啟動游戲的函數(shù),而在游戲中,應當有的內(nèi)容有:
(1)游戲內(nèi)的棋盤設計:三子棋應當是三行三列的一個棋盤,通過函數(shù)打印出來。
(2)玩家的移動:玩家輸入相應的坐標然后將屬于玩家的標記打印在棋盤上,且電腦不能在同一位置打印。
(3)電腦的移動:電腦應隨即控制,即調(diào)用rand函數(shù),使用time和時間隨機。
(4)輸贏的處理:這里需要給出判斷輸贏的條件:即任意一行或一列或?qū)蔷€相同即為贏,通過標記的符號來判斷玩家贏還是電腦贏,如果棋盤放滿且仍未判斷出輸贏,則為平局。
(5)函數(shù)的調(diào)用處理:在函數(shù)調(diào)用時,每走一步,應打印出相對應的棋盤供玩家觀看,定義一個頭文件直接將所需函數(shù)的頭文件以及所需要的定義的行列常量,函數(shù)聲明放在里面,在代碼中只需用COL和ROW表示即可,需要修改棋盤的時候,只需修改頭文件中的define所定義的COL以及ROW。
代碼實現(xiàn):
首先是游戲的界面代碼:直接用printf打印出來即可
void meun() { printf("****************\n"); printf("*****0.Exit*****\n"); printf("*****1.Play*****\n"); printf("****************\n"); }
然后設計出三子棋的棋盤
void ShowBoard(char board[][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf(" %c ",board[i][j]); if (j < col-1) { printf("|"); } } printf("\n"); if (i < row - 1) { for (int j = 0; j < col; j++) { printf("---"); if (j < col - 1) { printf("|"); } } printf("\n"); } } }
玩家的移動實現(xiàn),特別提到的是,實現(xiàn)時注意玩家輸入的坐標與數(shù)組對應下標的關系:玩家輸入的坐標對應的數(shù)組下標應該減一。
void PlayerMove(char board[][COL], int row, int col) { int x = 0; int y = 0; while (1) { printf("請輸入你的坐標:\n"); scanf("%d%d",&x,&y); if (x >= 1 && x <= 3 && y >= 1 && y <= 3) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = 'X'; break; } } else { printf("坐標有誤,請重新輸入\n"); } } }
電腦下棋的功能實現(xiàn):(用time讓rand函數(shù)變成隨機值而不固定隨機)
void ComputerMove(char board[][COL], int row, int col) { while (1) { srand((unsigned)time(NULL)); int x = rand() % ROW; int y = rand() % COL; if (board[x][y] == ' ') { board[x][y] = 'O'; break; } } }
輸贏的處理(代碼與思路一致,有IsWin函數(shù)(判斷輸贏),IsFull(判斷平局))
char IsWin(char board[][COL], int row, int col) { for (int 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]; } 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[0][0] != ' ') { return board[0][0]; } if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') { return board[0][2]; } if (IsFull(board, row, col) == 1) { return 'Q'; } } return ' '; } static int IsFull(char board[][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (board[i][j] == ' ') { return 0; } } } return 1; }
最后就是函數(shù)調(diào)用問題,設計一個函數(shù)game()來調(diào)用設計好的代碼功能,進行游戲功能的實現(xiàn)
void game() { char board[ROW][COL] = {0}; InitBoard(board, ROW, COL); ShowBoard(board, ROW, COL); int ret = 0; while (1) { PlayerMove(board, ROW, COL); ComputerMove(board, ROW, COL); ShowBoard(board, ROW, COL); ret = IsWin(board, ROW, COL); if (ret != ' ') { break; } } if (ret == 'X') { printf("玩家贏\n"); } if (ret == 'O') { printf("電腦贏\n"); } if (ret == 'Q') { printf("平局\n"); } }
主函數(shù)作為入口,讓玩家自由選擇進入游戲或者退出
int main() { int input = 0; do { meun(); printf("請選擇是否進入游戲:"); scanf("%d",&input); switch (input) { case 1: game(); break; case 0: printf("退出游戲\n"); break; default: printf("選擇有誤,請重新輸入\n"); break; } } while (input); return 0; }
一些需要調(diào)用的庫函數(shù)以及定義,函數(shù)聲明放在自定義頭文件中調(diào)用即可
#ifndef _GAME_H_ #define _GAME_H_ #include<stdio.h> #include<stdlib.h> #pragma once #define ROW 3 #define COL 3 void InitBoard(char board[][COL],int row,int cow); void ShowBoard(char board[][COL], int row, int col); void PlayerMove(char board[][COL], int row, int col); void ComputerMove(char board[][COL], int row, int col); char IsWin(char board[][COL], int row, int col); #endif
運行結果
更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。