日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言实现“人工智障”三子棋

發布時間:2024/5/14 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言实现“人工智障”三子棋 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、成品展示
    • 主界面展示:
  • 二、實現步驟
    • 1.初始化棋盤
    • 2.打印棋盤
    • 3.玩家電腦落子
    • 4. 判斷勝負
    • 5.游戲邏輯實現
  • 總結


前言

相信不少小伙伴在學校上的時候肯定都玩過三子棋吧,不用問我咋知道的,這是青春好吧,因為俺小時候就因為這個不少女孩子關系挺好的,好啦~~~禁止八卦!言歸正傳進入到我們今天的主題,我們增么用從語言來實現一個簡易的三子棋了?下面就誘發俺來給大家講解下。


一、成品展示

我們直接來看效果,然后再來反推它是怎么實現的吧!

主界面展示:

這個主界面設計存在一定的邏輯,但今天不是我們講解的重點,三子棋突突突!
這里我選擇1,進入三子棋游戲然后可以看到控制臺輸出了一個棋盤,仔細觀察到它是33的一個棋盤,然后在未落子時,盤面基本時空的,除了一定的打印修飾外!那么加入我們按照控制臺的提示來輸入一個坐標試試了,那就(2,2)吧,因為我本身就比較2;來看看效果:
當我輸入(2,2)時,棋盤的內容更新了,(2,2)這個位置多了一個號,這也是玩家的棋子,然后人工智障不假思索的在(2,3)這個位置下了個!,我們來戰勝它!
智商在線了一波,我贏了,這不贏的建議回爐重造!后面還有重開游戲的邏輯,都比較簡單,我們步入正題,三子棋的實現步驟;

二、實現步驟

1.初始化棋盤

其實我們存儲的棋子本質上是存儲在二維數組中的字符,所以在開始游戲或者重新開始一局新的游戲時,我們必須初始化數組中的內容,初始化為什么了,我們這邊 剛剛看到在游戲剛開始時控制臺只是打印了棋盤,所以剛開始數組中存儲的便是空格,只需要簡簡單單的遍歷一下就可以了:上個代碼看看吧

void initboard(char board[ROW][COL], int row, int col) {for (int i = 0;i < row;i++) {for (int j = 0;j < col;j++) {board[i][j] = ' ';}} }

二維數組傳參,數組名表示的時一行數組的地址,所以我們必須把行,列,全部傳過去,然后在通過兩個for循環對其中的每個元素進行初始化!我們在vs中去看一下:
可以i看到經過初始化后,board數組中的元素為空格:

2.打印棋盤

打印棋盤在控制臺上這一步我覺得時最難的,它需要你花不少的心思去仔細琢磨!不過總體來說我們還是按照分組的形式來理解它,一行加一個分割行為一組,然后再邊界出要仔細思考臨界值到底應該如何設置,才是正確打印棋盤的訣竅:我們用圖片與代碼相結合的方式來來表示一下:

void print_board(char board[ROW][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");for (int j = 0;j < col;j++) {//分割行if (i < row - 1) {printf("---");if (j < col - 1) {printf("|");}}}printf("\n");} }

需要我們注意的是,每一行和沒一列的最后不需要打印相關的東西,這一這點邏輯并在代碼的相關部分實現是很重要的!

3.玩家電腦落子

這個就比較簡單,相當于是改一下二維數組當中的內容就好了,有一點需要注意的是,數組的下標是從0開始的,需要一定的轉化,需要判斷輸入的左邊是否合法,還需要判斷此處的是否是空的,滿足兩項,則就可以來進行落子了!上代碼:

void player_move(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;printf("你的落子:\n");while (1) {printf("請輸入你要落子的坐標:\n");scanf("%d%d", &x, &y);//判斷坐標合法性if (x >= 1 && x <= col && y >= 1 & y <= row) {if (board[x - 1][y - 1] == ' ') {board[x - 1][y - 1] = '*';break;}else {printf("坐標被占用,請重新輸入!");}}else {printf("坐標不合法,請重新輸入!");}} }

其實也就是簡單的選擇分支語句,掌握了邏輯,都能寫出來,有的事看著難,其實也就那樣,你們說是嗎?

4. 判斷勝負

這一點就需要仔細想一想了,生活中的三子棋游戲規則我們都知道,那么怎么樣轉化成合適的計算機及語言了?
我當初想的是直接遍歷二維數組中的每一個元素,比較橫向和縱向,以及兩個45度的方向,這些都可以通過坐標來實現,但我后面又一想,似乎會導致下標越界,加入你就正在遍歷第一行的最后一個元素,你對他進行加一判斷,是不是就越界了了?于是我便想到了列舉每一方向,是不是很搓,我也沒想到啥好辦法,又小伙伴有好主意的花,歡迎在評論區留言哦!當然判斷之前的看看棋盤是不是滿了,滿了就平局唄。我們來看看吧:

int judge_win(char board[ROW][COL], int row, int col) {int count = 0;for (int i = 0;i < row;i++) {//判斷棋盤是不是空for (int j = 0;j < col;j++) {if (board[i][j] == ' ') {count++;}}}if (count == 0) {//如果count為0,則表示棋盤沒有任何的空間了!printf("平局!\n");return 0;}else {//有空間for (int i = 0;i < row;i++) {if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) {列舉橫向if (board[i][0] == '*') {printf("玩家贏\n");return 1;}else if(board[i][0]=='!') {printf("電腦贏\n");return 1;}}}for (int j = 0;j < col;j++) {if (board[0][j] == board[1][j]&& board[1][j] == board[2][j]) {//列舉縱向if (board[0][j] == '*') {printf("玩家贏\n");return 1;}else if (board[0][j] == '!') {printf("電腦贏\n");return 1;}}}if (board[1][1] == board[0][0] &&board[0][0]== board[2][2]) {列舉西北方向if (board[0][0] == '*') {printf("玩家贏\n");return 1;}else if (board[0][0] == '!') {printf("電腦贏\n");return 1;}}if (board[1][1] == board[2][0]&& board[2][0] == board[0][2]) {//列舉東北方向if (board[1][1] == '*') {printf("玩家贏\n");return 1;}else if (board[1][1] == '!') {printf("電腦贏\n");return 1;}}}return 0; }

5.游戲邏輯實現

就是簡簡單單的一個人下一個棋子,判斷一下,打印棋盤,直到一方勝出或者平局;放在一個while循環里面就可以了然后設置一下返回值來實現游戲后續的邏輯:

void game() {char board[ROW][COL] = { 0 }; begin:initboard(board, ROW, COL);//初始化棋盤print_board(board,ROW,COL);//打印棋盤while (1) {//循環實現重復下棋player_move(board, ROW, COL);int me=judge_win(board, ROW, COL);//有一方勝出返回1,平局返回0if (me) {printf("nb,再來一把?(1/0)\n");int input2 = 0;scanf("%d", &input2);if (input2) {goto begin;}else {return;}}print_board(board, ROW, COL);//打印棋盤computer_move(board, ROW, COL);//電腦下棋int it=judge_win(board, ROW, COL);//判斷if (it) {printf("別灰心,再來一把?(1/0)\n");int input2 = 0;scanf("%d", &input2);if (input2) {goto begin;}else {return;}}print_board(board, ROW, COL);} }

總結

三子棋的簡單實現就到這里了,因為電腦落子是隨機數生成的,所以有點呆,堪稱“人工智障”,俺也會繼續想想辦法,能不能讓電腦變得聰明點,后續還會在該項目中加入一些經典的游戲,歡迎大家到我的碼云link上一起來試毒!!!

總結

以上是生活随笔為你收集整理的C语言实现“人工智障”三子棋的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人妻互换一二三区激情视频 | 免费草逼视频 | 成人区人妻精品一熟女 | 国产内谢| 久久午夜夜伦鲁鲁一区二区 | 无码国产色欲xxxx视频 | 国产成人福利视频 | 黄网站在线播放 | 午夜精品在线观看 | 久久久久久91亚洲精品中文字幕 | 欧美性极品xxxx做受 | 九九热在线视频 | 警察高h荡肉呻吟男男 | 少妇偷人精品无码人妻 | 国产三级做爰高清在线 | 日韩电影一区二区三区四区 | 午夜影院在线观看免费 | 亚洲AV不卡无码一区二区三区 | 羞视频在线观看 | 无套内谢少妇毛片 | 精品午夜一区二区三区 | 欧美变态绿帽cuckold | 亚洲国产av一区二区 | 理想之城连续剧40集免费播放 | 欧美激情videos| www.99在线 | 放几个免费的毛片出来看 | av一二三四区 | 国产精品一区二区无码对白 | 激情小说综合 | 国产片天天弄 | 日本特黄一级大片 | 国产一级二级三级 | 尤物网在线 | 日本偷拍一区 | 亚洲操操操 | 国产精品无码毛片 | 尤物精品视频在线观看 | 一级黄色大片网站 | 国产精品爽爽久久久久久 | 亚洲国产一区视频 | 久热网 | 中文字幕1 | 99久久久久久久久久 | 在线国产一区二区 | 女人的天堂av在线 | 亚洲国产福利 | 一区二区在线视频观看 | 男女做受视频 | 日日日日日日bbbbbb | 亚洲欧洲国产视频 | 在线观看wwww | 国产精品自拍小视频 | 日本一区二区不卡在线观看 | 奇米网888| 涩涩视频在线 | 欧美激情免费在线 | 成人天堂av| 91在线日韩 | 一级黄色a级片 | 午夜av在线| 日本一区二区三区免费电影 | 男生和女生一起差差差视频 | 糖心视频在线 | 国产精品国产成人国产三级 | 9色在线视频| 日韩在线观看av | 午夜肉伦伦影院 | 美女福利在线视频 | 久久国产高清 | 羞辱狗奴的句子有哪些 | 国产又粗又猛又黄视频 | 日韩av网址大全 | 日本伊人网 | 成人欧美一区二区三区在线播放 | 你懂的网站在线 | 97超碰伊人 | 欧美一级专区 | 国产91丝袜在线18 | 黑人干日本少妇 | 亚洲AV无码国产精品国产剧情 | av色区| 免费黄色一级 | 最新中文字幕在线观看 | 天堂视频一区 | 国产精品二区视频 | 伊人婷婷在线 | www.久久久久久久久久 | 一区小视频 | 一卡二卡精品 | wwwav在线播放 | 三级大片在线观看 | 欧美日韩影院 | 午夜精品免费视频 | 蜜桃视频久久一区免费观看入口 | 国产肉体ⅹxxx137大胆 | 精品在线观看免费 | 久久婷婷综合国产 | 午夜影院在线观看免费 |