<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言實現三子棋小遊戲的具體程式碼,供大家參考,具體內容如下
採用二位陣列儲存棋盤資訊,棋盤上面的任何一個位置,裡頭可以放三個資訊:
1、空
2、使用者落子
3、電腦落子
下三子棋就是在二維陣列種找對應的空位置,進行落子,落完之後立即就要判斷落子位置是否有三字連珠,從而判斷誰數輸誰贏。每走一次棋會有四種情況:
*使用者1贏
*使用者2贏
*平局(棋盤被沾滿)
**沒有出結果 繼續下棋
檔名 作用
three_chress.h 三子棋的函數宣告,標頭檔案宣告等
three_chress.c 三子棋函數介面的實現
main.c 三子棋函數測試功能
一、我們要先在main.c這個檔案,還是一樣把框架構建好,再去分別實現他們的功能。實現選單以及遊戲的開始結束都在main函數裡面,再從裡面拿出遊戲開始函數去具體實現遊戲的進行。並把每次用到的標頭檔案包含再three_chress.h裡面。
main.c
#include"three_chress.h" void menu() { printf("###### 1、開始遊戲 #######n"); printf("###### 2、退出 #######n"); } void game() { char ret = 0; srand((unsigned int)time(NULL)); char a[ROW][COL] = { 0 }; init_a(a,ROW,COL);//初始化 show(a, ROW, COL);//視覺化 while (1) { play_move(a, ROW, COL);//使用者走 show(a, ROW, COL); ret = Is_over(a,ROW,COL);//判斷是否結束 if (ret != 'N')//N這個字元表示繼續的意思 { break; } computer_move(a, ROW, COL);//電腦走 show(a, ROW, COL); ret = Is_over(a,ROW, COL);//判斷是否結束 if (ret != 'N')//N這個字元表示繼續的意思 { break; } } if (ret == '*') { printf("使用者贏n"); } else if (ret =='#') { printf("電腦贏n"); } else if (ret ='D')//D表示為平局 { printf("平局n"); } show(a, ROW, COL); } int main() { int input = 0; do{ menu(); printf("請選擇-> "); scanf("%d", &input); switch (input) { case 1: game(); break; case 2: printf("退出"); break; default: printf("不存在,請重新輸入"); break; } } while (input); return 0; }
three_chress.h
#pragma once #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 void init_a(char a[][COL], int row, int col);//初始化 void show(char a[][COL], int row , int col);//視覺化 void play_move(char a[][COL],int row,int col);//使用者下 void computer_move(char a[][COL], int row, int col);//電腦下 char Is_over(char a[][COL],int row,int col);//判斷是否結束 int is_full(char a[][COL],int row, int col);
二、那麼遊戲怎麼進行?我們要先實現這樣的邏輯:構建二維陣列並初始化——>顯示棋盤資訊即視覺化——>讓使用者走並顯示棋盤資訊而且要立即判斷使用者是否贏,在判斷時候我們用字元N來取表示遊戲繼續,如果返回的不是N說明遊戲結束。——>如果沒贏讓電腦走並顯示棋盤資訊且判斷電腦是否贏。最後我們用返回字元方式去判斷誰贏或者平局。
三、把以上用到的邏輯用函數去一步一步實現,重點說幾個函數:
1、在play_move函數裡面需要注意的是 ,下棋所輸入的座標要先去判斷其合法性以及多重性也就是重複。之後再賦棋子。
2、在computer_move實現比較簡單,讓電腦自動走、隨機走 ,就要想到rand函數,而rand函數又和srand函數有,再用他們的性質讓是X,Y隨機生成0到2的值,去賦棋子即可。
3、而Is_over函數去判斷輸贏就是四種情況:使用者贏;電腦贏;平局;繼續。
直接比較四個方向上下兩個對角線上的每個位置是否相等,且不為空。再寫個判斷是否滿的函數去判斷是否是平局,最後返回繼續。這裡面返回的都是字元。
如下程式碼:
three_chree.c
#include"three_chress.h" static int is_full(char a[][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (a[i][j]== ' ') { return 0; } } } return 1; } void init_a(char a[][COL], int row, int col) { int i = 0; for (i = 0; i < row; i++) { for (int j = 0; j < col; j++) { a[i][j] = ' '; } } } void show(char a[][COL], int row, int col) { int i = 0; for (i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf(" %c ", a[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"); } } } void play_move(char a[][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 <= row && y >= 1 && y <= col) { if (a[x - 1][y - 1] == ' ') { a[x - 1][y - 1] = '*'; break; } else { printf("已被佔用,請重新輸入"); } } else { printf("非法輸入"); } } } void computer_move(char a[][COL], int row, int col) { printf("電腦走n"); int x = 0; int y = 0; x = rand() % row; y = rand() % col; while (1) { if (a[x][y] == ' ') { a[x][y] = '#'; break; } } } char Is_over(char a[][COL], int row, int col)//判斷是否結束 { for (int i = 0; i < row; i++) { if (a[i][0] == a[i][1] && a[i][1] == a[i][2] && a[i][0] != ' ') { return a[i][0]; } } for (int j = 0; j < col; j++) { if (a[0][j] == a[1][j] && a[1][j] == a[2][j] && a[0][j] != ' ') { return a[0][j]; } } if (a[0][0] == a[1][1] && a[1][1] == a[2][2] && a[0][0] != ' ') { return a[0][0]; } if (a[0][2] == a[1][1] && a[1][1] == a[2][0] && a[0][2] != ' ') { return a[0][2]; } if ( is_full(a, ROW, COL) == 1) { return 'D'; } return 'N';//表示遊戲繼續 }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45