最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C語言實(shí)現(xiàn)三子棋游戲

 更新時間:2021年07月30日 14:19:38   作者:weixin_47300000  
這篇文章主要為大家詳細(xì)介紹了使用C語言實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)三子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

先簡單介紹一下我的三子棋小游戲是怎么玩的,就是自己跟電腦pk,只不過電腦沒這么智能。自己輸入想要下的坐標(biāo),電腦隨機(jī)生成一個坐標(biāo),直到贏家產(chǎn)生。在這個過程中我覺得比較難的就是贏家的判定部分。在c語言中隨機(jī)數(shù)的產(chǎn)生也就是調(diào)用srand()函數(shù)利用時間戳來獲取隨機(jī)值。算了游戲太簡單,我想你們也都是沖著代碼來的,直接上代碼。

代碼和實(shí)現(xiàn)

為了代碼邏輯性更高,沒那么繁雜,主要將代碼分為三個部分,頭文件game.h,和兩個c文件,game.c放主程序,body.c放各種函數(shù)。

1.game.c

講解:游戲開始要打印一個界面,然后選擇要玩游戲還是退出,如果玩游戲就直接調(diào)用Game函數(shù)再調(diào)用各種花里胡哨的函數(shù)來實(shí)現(xiàn)游戲。game.c沒什么可講的,都是基本操作,有手就行。

#include "game.h"
 
void menu() {
 printf("********************\n");
 printf("****** 1.play  *****\n");
 printf("****** 0.exit  *****\n");
 printf("********************\n");
}
void Game() {
 char ch;
 char board[ROW][COL] = { 0 };
 InitBoard(board, ROW, COL);
 ShowBoard(board, ROW, COL);
 while (1) {
  PlayerMove(board, ROW, COL);
  ShowBoard(board, ROW, COL);
  ch=WhoWin(board, ROW, COL);
  if (ch == '*') {
   printf("玩家贏!\n");
   break;
  }
  else if (ch == '#') {
   printf("電腦贏!\n");
   break;
  }
  else if(ch=='a') {
   printf("平局!\n");
   break;
  }
 
  WindowPlay(board, ROW, COL);
  ShowBoard(board, ROW, COL);
  ch = WhoWin(board, ROW, COL);
  if (ch == '*') {
   printf("玩家贏!\n");
   break;
  }
  else if (ch == '#') {
   printf("電腦贏!\n");
   break;
  }
  else if(ch=='a') {
   printf("平局!\n");
   break;
  }
 }
 
}
int main() {
 menu();
 srand((unsigned int)time(NULL));
 int input = 0;
 do {
  printf("請輸入:");
  scanf("%d", &input);
  switch (input) {
  case 1:
   Game();
   continue;
  case 0:
   break;
  default:
   printf("輸入不合法,請從新輸入\n");
   continue;
  }
 } while (input);
 return 0;
}

2.body.c

講解:body.c里就是各種花里胡哨的函數(shù),一個功能一個函數(shù),不要一個函數(shù)搞太多功能,看起來比較繁雜,條理不清晰。這里的棋盤借用二維數(shù)組來實(shí)現(xiàn),因為二維數(shù)組和一個棋盤的構(gòu)造類似,用二維數(shù)組再合適不過,如果你夠牛逼,你來個三維數(shù)組的。包含的功能有棋盤初始化,打印棋盤,玩家下,電腦下,最后就是判斷輸贏。判斷輸贏也是比較難的一個部分。這里我用了最粗暴的方法,就是分四種情況,行,列,對角線,還有棋盤滿了。比較繁瑣但是比較實(shí)用,也沒什么可說的都是比較常用的語句。唯一可說的就是srand()函數(shù)獲取隨機(jī)值,srand()功能就是生成隨機(jī)值,還需要一個種子seed為無符號整型數(shù)??梢杂胻ime(NULL)時間戳來作為這個種子,用rand()%n來獲取你想要的數(shù)字。

#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 ShowBoard(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) {
   printf("---|---|---\n");
  }
 }
}
 
//玩家下
void PlayerMove(char board[ROW][COL], int row, int col) {
 do {
  int i;
  int j;
  printf("請玩家輸入:");
  scanf("%d%d", &i, &j);
  if (i > row && j > col && i <= 0 && j<= 0) {
   printf("坐標(biāo)不合法,請從新輸入\n");
   continue;
  }
  else if (board[i-1][j-1] == ' ') {
   board[i-1][j-1] = '*';
   break;
  }
  else {
   printf("該處已被占請從新輸入\n");
   continue;
  }
 } while (1);
}
 
//電腦下
void WindowPlay(char board[ROW][COL], int row, int col) {
 printf("等待電腦下!\n");
 do {
  int i = rand() % 3;
  int j = rand() % 3;
  if (board[i][j] == ' ') {
   board[i][j] = '#';
   break;
  }
  else {
   continue;
  }
 } while (1);
}
 
 
//判斷輸贏
char WhoWin(char board[ROW][COL], int row, int col) {
 //判斷行
 for (int i = 0; i < row; i++) {
  int j = 0;
  if (board[i][j] == board[i][j + 1] && board[i][j + 1] == board[i][j + 2] && board[i][j]!=' ') {
   if (board[i][j] == '*') {
    return board[i][j];
   }
   else {
    return board[i][j];
   }
  }
 }
 //判斷列
 for (int j = 0; j < col; j++) {
  int i = 0;
  if (board[i][j] == board[i+1][j] && board[i+1][j] == board[i+2][j] && board[i][j] != ' ') {
   if (board[i][j] == '*') {
    return board[i][j];
   }
   else {
    return board[i][j];
   }
  }
 }
 //判斷對角線
 int i = 0;
 int j = 0;
 if (board[i][j] == board[i + 1][j + 1] && board[i + 1][j + 1] == board[i + 2][j + 2] && board[i][j] != ' ') {
  if (board[i][i] == '*') {
   return board[i][j];
  }
  else{
   return board[i][j];
  }
 }
 if (board[i][j+2] == board[i + 1][j + 1] && board[i + 1][j + 1] == board[i + 2][j] && board[i][j+2] != ' ') {
  if (board[i][i] == '*') {
   return board[i][j+2];
  }
  else{
   return board[i][j+2];
  }
 }
 //判斷棋盤是否滿
 int count = 0;
 //char a=0;
 for (i = 0; i < row; i++) {
  int j = 0;
  for (j = 0; j < col; j++) {
   if (board[i][j] == ' ') {
    count++;
   }
  }
 }
 if (count == 0) {
  return 'a';
 }
}

3.game.h

講解:這里主要給大家說一下頭文件,頭文件可以把各個c語言文件聯(lián)系起來,可以定義一些全局變量,宏,函數(shù)聲明,引用一些內(nèi)部庫等。一次定義多處使用,其他c文件只要引用這個頭文件就賦予了它調(diào)用某些函數(shù)的權(quán)限,調(diào)用某些變量,宏的權(quán)限。頭文件只是聲明不占用內(nèi)存空間,可以不用,但是強(qiáng)烈建議用,因為當(dāng)一個工程的代碼量很大時,沒有頭文件就相當(dāng)于沒有了頭。所以是很重要的。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
#define ROW 3
#define COL 3
 
 
//初始化棋盤
void InitBoard(char board[ROW][COL],int row,int col);
//打印棋盤
void ShowBoard(char board[ROW][COL],int row,int col);
//玩家下
void PlayerMove(char board[ROW][COL], int row,int col);
//電腦下
void WindowPlay(char board[ROW][COL], int row,int col);
 
//判斷輸贏
char WhoWin(char board[ROW][COL],int row,int col);

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++實(shí)現(xiàn)猜牌小游戲

    C++實(shí)現(xiàn)猜牌小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)猜牌小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 深入分析C語言存儲類型與用戶空間內(nèi)部分布

    深入分析C語言存儲類型與用戶空間內(nèi)部分布

    這篇文章主要介紹了C語言存儲類型與用戶空間內(nèi)部分布,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • C++深入探索類和對象之封裝及class與struct的區(qū)別

    C++深入探索類和對象之封裝及class與struct的區(qū)別

    C++?類與對象涉及的知識點(diǎn)非常廣泛,所以我準(zhǔn)備寫成幾個特定的部分來作為博文分享,這次的blog將詳細(xì)講解類的屬性、行為、訪問權(quán)限,class與struct的區(qū)別以及具體案例,希望能夠?qū)δ銈冇袔椭?,解決入門小白或者對這方面了解不多的朋友們,那么接下來開始今天的內(nèi)容
    2022-05-05
  • C++中簡單讀寫文本文件的實(shí)現(xiàn)方法

    C++中簡單讀寫文本文件的實(shí)現(xiàn)方法

    本篇文章是對C++中簡單讀寫文本文件的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用c++實(shí)現(xiàn)OpenCV圖像橫向&縱向拼接

    使用c++實(shí)現(xiàn)OpenCV圖像橫向&縱向拼接

    這篇文章主要介紹了使用c++實(shí)現(xiàn)OpenCV圖像橫向&縱向拼接,文中有圖像拼接函數(shù),可以實(shí)現(xiàn)如“長圖拼接王”這類小程序的類似功能,大家可以將該函數(shù)封裝在軟件中自由使用
    2021-08-08
  • C++設(shè)計模式之享元模式

    C++設(shè)計模式之享元模式

    這篇文章主要介紹了C++設(shè)計模式之享元模式,本文講解了什么是享元模式、享元模式代碼實(shí)例、享元模式的優(yōu)點(diǎn)等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C++制作鼠標(biāo)連點(diǎn)器實(shí)例代碼

    C++制作鼠標(biāo)連點(diǎn)器實(shí)例代碼

    大家好,本篇文章主要講的是C++制作鼠標(biāo)連點(diǎn)器實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組Array實(shí)例詳解

    數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組Array實(shí)例詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組Array實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C語言的入口函數(shù)的實(shí)現(xiàn)

    C語言的入口函數(shù)的實(shí)現(xiàn)

    在C語言的世界里,所有的程序都是用函數(shù)來裝配的,main稱之為主函數(shù),是所有程序運(yùn)行的入口,本文主要介紹了C語言的入口函數(shù),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 基于C++實(shí)現(xiàn)kinect+opencv 獲取深度及彩色數(shù)據(jù)

    基于C++實(shí)現(xiàn)kinect+opencv 獲取深度及彩色數(shù)據(jù)

    本文的主要思想是Kinect SDK 讀取彩色、深度、骨骼信息并用OpenCV顯示,非常的實(shí)用,有需要的小伙伴可以參考下
    2015-12-12

最新評論

连平县| 汉阴县| 大城县| 康马县| 肥东县| 吉安县| 封丘县| 文登市| 烟台市| 依安县| 高阳县| 雷波县| 鱼台县| 郓城县| 镶黄旗| 通渭县| 宣恩县| 如皋市| 东港市| 湖南省| 延边| 麟游县| 南川市| 丰县| 黑水县| 金山区| 宜章县| 广南县| 张家港市| 泰州市| 陆良县| 昌黎县| 建平县| 龙州县| 宣威市| 都江堰市| 拜泉县| 江山市| 峨眉山市| 鱼台县| 红原县|