當前位置:網站首頁>三子棋(C語言實現)
三子棋(C語言實現)
2022-01-28 07:32:18 【ww171992】
遊戲代碼分文件編寫
1.測試文件:test.c
2.遊戲代碼實現:game.c
3.頭文件:game.h
編譯環境:vs2019
測試文件:test.c
#define _CRT_SECURE_NO_WARNINGS 1 #pragma warning(disable:6031) //測試三子棋遊戲的邏輯 #include"game.h" void menu() { printf("****************************\n"); printf("******** 1. play ********\n"); printf("******** 0. exit ********\n"); printf("****************************\n"); } void game() { char ret = 0; //存放下棋的數據 char board[ROW][COL] = { 0 }; //初始化棋盤為空格 InitBoard(board, ROW, COL); //打印棋盤 DisplayBoard(board, ROW, COL); while (1) { //玩家下棋 player_move(board, ROW, COL); DisplayBoard(board, ROW, COL); //判斷輸贏 ret = is_win(board, ROW, COL); if (ret != 'C') { break; } //電腦下棋 computer_move(board, ROW, COL);//隨機下棋 DisplayBoard(board, ROW, COL); //判斷輸贏 ret = is_win(board, ROW, COL); if (ret != 'C') { break; } } if (ret == '*') { printf("玩家贏了\n"); } else if (ret == '#') { printf("玩家贏了\n"); } else { printf("平局\n"); } } //什麼情况下遊戲結束 //玩家贏 - '*' //電腦贏 - '#' //平局 - 'Q' //繼續 - 'C' 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); } int main() { test(); return 0; }
遊戲代碼實現:game.c
#define _CRT_SECURE_NO_WARNINGS 1 #pragma warning(disable:6031) #include"game.h" void InitBoard(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++) { board[i][j] = ' '; } } } //void DisplayBoard(char board[ROW][COL], int row, int col) //{ // int i = 0; // for (i = 0; i < row; i++) // { // //打印數據 // printf(" %c | %c | %c \n", board[i][0], board[j][1], board[i][2]); // //打印分割的行 // if (i < row - 1) // { // printf("---|---|---\n"); // } // } //} 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 player_move(char board[ROW][COL], int row, int col) { int x = 0; int y = 0; printf("玩家下棋\n"); 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("該坐標被占用,請重新輸入\n"); } } else { printf("坐標非法,請重新輸入\n"); } } } void computer_move(char board[ROW][COL], int row, int col) { int x = 0; int y = 0; printf("電腦下棋\n"); while (1) { x = rand() % row;//0-2 y = rand() % row;//0-2 if (board[x][y] == ' ') { board[x][y] = '#'; break; } } } static int is_full(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++) { if (board[i][j] == ' ') { return 0; } } } return 1; } char is_win(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[1][1] != ' ') { return board[1][1]; } //判斷平局 if (is_full(board, row, col) == 1) { return 'Q'; } //繼續 return 'C'; }
頭文件:game.h
#pragma once #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 player_move(char board[ROW][COL], int row, int col); //電腦下棋 void computer_move(char board[ROW][COL], int row, int col); //判斷輸贏 char is_win(char board[ROW][COL], int row, int col);
版權聲明
本文為[ww171992]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201280732177010.html
邊欄推薦
猜你喜歡
-
ScheduledExecutorService scheduleAtFixedRate、scheduleWithFixedDelay以及創建定時心跳
-
LVS負載均衡集群(NAT模式)
-
常見消費電子設備接口總結
-
軟件測試周刊(第47期):要愛具體的人,不要愛抽象的人;要愛生活,不要愛生活的意義。
-
73.網絡安全滲透測試—[SQL注入篇12]—[SQLSEVER+ASP-視圖查詢報錯注入]
-
Openstack實驗之nova服務的安裝與配置
-
win7系統上將電腦變為熱點的辦法
-
Jedis連接阿裏雲redis
-
APP違法使用個人信息?不用怕,華為雲VSS為你保駕護航
-
基於STL的演講比賽流程管理系統
隨機推薦
- 藍橋杯第三講--二分【習題】
- 地址的地址?
- 百度地圖開發-搭建基礎脚手架 01
- Qt給靜態屏保加上粒子特效
- php獲取gmt時間及時區修改
- lnmp 三之haproxy的使用
- Alink & FlinkMLlib 文章匯總
- cesium導入旋轉動畫
- QGC雜記
- NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}····
- CISP——關於網絡安全法(分享筆記)
- 通過ReentrantLock源碼看AQS源碼實現
- 記錄在appA裏面打開appB進行登錄,再次點擊桌面圖標appB避免再次重新啟動程序的解决辦法
- 自建Kubernetes的LoadBalancer類型服務方案-MetalLB
- 解决延遲有 Wi-Fi 6 就够了!(家裏的 Wi)
- JS中的forEach()和map()方法介紹
- 【Unity Shader】HDRP下Amplify Shader Editor透明物體排序不正確
- yum -bash: /usr/bin/yum: /usr/bin/: bad interpreter: Permission denied
- 惡意軟件分析實戰20-內核級軟件逆向Lab10-2
- 百度BML-飛槳服務器以及Jetson nano部署實戰案例(下)
- 220121--測試用例
- 北京大學2022年對元宇宙的全球研究報告
- 網上期貨開戶安全麼?期貨開戶准備什麼資料?
- [渝粵教育] 華中農業大學 經濟學原理 參考 資料
- 查看多臺jps的脚本
- #全網寒假最火特輯# 【第一章】 C語言之牛客網刷題筆記 【點進來保證讓知識充實你一整個寒假】
- 雲演 CTF Web題型 lfi 文件包含
- 【leectode 2022.1.22】批量處理任務
- IC驗證中的force/release 學習整理(4)後門訪問機制成與敗(續)
- 數學建模-模糊綜合評價法(評價模型)
- Vulnhub靶機recon: 1滲透
- DWR异常:org.xml.sax.SAXException
- 亞線性的近似最小支撐樹
- JDBC編碼六步走
- ZZULIOJ 1173: 密碼解密(指針專題)
- 143. 重排鏈錶
- 掃雷初階版
- [渝粵教育] 東南大學 工程熱力學 參考 資料
- 如何將PDF轉換成Word文檔?試試這款PDF轉Word工具—PDF to Word OCR
- Redis 是如何處理命令的(客戶端)