C語言實(shí)現(xiàn)三子棋
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)三子棋的具體代碼,供大家參考,具體內(nèi)容如下
代碼內(nèi)有詳細(xì)注釋
源.c代碼如下:
#define _CRT_SECURE_NO_WARNINGS #include"Game.h" void Game() { char result = 0; //創(chuàng)建棋盤 char board[ROW][COL] = { 0 }; //初始化棋盤 Init_board(board, ROW, COL); //打印棋盤 Print_board(board, ROW, COL); while (1) { //玩家走棋 printf("玩家走棋:\n"); Player_move(board, ROW, COL); Print_board(board, ROW, COL); //判斷游戲狀態(tài) 繼續(xù) 平局 玩家勝 電腦勝 result = Game_state(board, ROW, COL); if (result != 'C') { break; } //電腦走棋 printf("電腦走棋:\n"); Computer_move(board, ROW, COL); Print_board(board, ROW, COL); //判斷游戲狀態(tài) 繼續(xù) 平局 玩家勝 電腦勝 result = Game_state(board, ROW, COL); if (result != 'C') { break; } } if (result == 'X') printf("玩家勝\n"); else if (result == 'O') printf("電腦勝\n"); else printf("平局\n"); printf("再來一局請輸入1,退出請輸入0\n"); } void Menu() { int input = 0; printf("*****************************\n"); printf("**** 1.play 2.exit ****\n"); printf("*****************************\n"); do { printf("請選擇:\n"); scanf("%d", &input); switch (input) { case 1: Game(); break; case 0: printf("退出游戲\n"); break; default: printf("請輸入1或0\n"); break; } } while (input); } int main() { //設(shè)置隨機(jī)數(shù)起點(diǎn) srand(time(NULL)); //寫一個(gè)游戲 //打印菜單 Menu(); return 0; }
Game.h代碼如下:
#include<stdio.h>//NULL #include<time.h>//time #include<stdlib.h>//rand srand #define ROW 3 #define COL 3 void Game(); void Init_board(char board[ROW][COL],int row, int col); void Print_board(char board[ROW][COL], int row, int col); void Player_move(char board[ROW][COL], int row, int col); void Computer_move(char board[ROW][COL], int row, int col); char Game_state(char board[ROW][COL], int row, int col);
Game.c代碼如下:
#define _CRT_SECURE_NO_WARNINGS #include"Game.h" void Init_board(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 Print_board(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(j == col - 1) printf(" %c \n", board[i][j]); else printf(" %c |", board[i][j]); } if (i < row -1) printf("---|---|---\n"); } } void Player_move(char board[ROW][COL], int row, int col) { int x = 0, y = 0; //判斷是否可以落子 1.可以落子 2.已占用 3.坐標(biāo)非法 while (1) { printf("請輸入要落子的坐標(biāo):\n"); scanf("%d%d", &x, &y); printf("\n"); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = 'X'; break; } else printf("坐標(biāo)已占用,請重新輸入\n"); } else printf("坐標(biāo)非法,請重新輸入\n"); } } void Computer_move(char board[ROW][COL], int row, int col) { int x = 0, y = 0; while(1) { x = rand() % row; y = rand() % col; if (board[x][y] == ' ') { board[x][y] = 'O'; break; } } printf("\n"); } int Full_board(char board[ROW][COL], int row, int col) { int i = 0, j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (board[i][j] == ' ') return 0; } } return 1; } char Game_state(char board[ROW][COL], int row, int col) { int i = 0, j = 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[0][0]; if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') return board[0][2]; //判斷是否平局 if (Full_board(board, ROW, COL) == 1) return 'D'; //上述情況都不成立,游戲繼續(xù) return 'C'; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言 動(dòng)態(tài)分配數(shù)組案例詳解
這篇文章主要介紹了C語言 動(dòng)態(tài)分配數(shù)組案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08C語言如何實(shí)現(xiàn)Unix時(shí)間戳與本地時(shí)間轉(zhuǎn)化
這篇文章主要介紹了C語言如何實(shí)現(xiàn)Unix時(shí)間戳與本地時(shí)間轉(zhuǎn)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03基于C++實(shí)現(xiàn)高精度計(jì)時(shí)器
chrono是C++ 11中的時(shí)間庫,它提供了跨平臺(tái)的高精度時(shí)鐘解決方案,精確到納秒級,本文主要為大家詳細(xì)介紹了如何使用chrono實(shí)現(xiàn)高精度計(jì)時(shí)器,感興趣的可以了解下2024-02-02深入理解memmove()與memcpy()的區(qū)別以及實(shí)現(xiàn)方法
本篇文章是對memmove()與memcpy()的區(qū)別以及實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++面試題之?dāng)?shù)a、b的值互換(不使用中間變量)
這篇文章主要介紹了不使用中間變量,C++實(shí)現(xiàn)數(shù)a、b的值互相轉(zhuǎn)換操作,感興趣的小伙伴們可以參考一下2016-07-07