中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用C語言實現三子棋游戲

發布時間:2021-07-30 15:59:56 來源:億速云 閱讀:131 作者:chen 欄目:開發技術

這篇文章主要介紹“如何使用C語言實現三子棋游戲”,在日常操作中,相信很多人在如何使用C語言實現三子棋游戲問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用C語言實現三子棋游戲”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

本文實例為大家分享了C語言實現三子棋游戲的具體代碼,供大家參考,具體內容如下

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

代碼和實現

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

1.game.c

講解:游戲開始要打印一個界面,然后選擇要玩游戲還是退出,如果玩游戲就直接調用Game函數再調用各種花里胡哨的函數來實現游戲。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里就是各種花里胡哨的函數,一個功能一個函數,不要一個函數搞太多功能,看起來比較繁雜,條理不清晰。這里的棋盤借用二維數組來實現,因為二維數組和一個棋盤的構造類似,用二維數組再合適不過,如果你夠牛逼,你來個三維數組的。包含的功能有棋盤初始化,打印棋盤,玩家下,電腦下,最后就是判斷輸贏。判斷輸贏也是比較難的一個部分。這里我用了最粗暴的方法,就是分四種情況,行,列,對角線,還有棋盤滿了。比較繁瑣但是比較實用,也沒什么可說的都是比較常用的語句。唯一可說的就是srand()函數獲取隨機值,srand()功能就是生成隨機值,還需要一個種子seed為無符號整型數。可以用time(NULL)時間戳來作為這個種子,用rand()%n來獲取你想要的數字。

#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("坐標不合法,請從新輸入\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語言文件聯系起來,可以定義一些全局變量,宏,函數聲明,引用一些內部庫等。一次定義多處使用,其他c文件只要引用這個頭文件就賦予了它調用某些函數的權限,調用某些變量,宏的權限。頭文件只是聲明不占用內存空間,可以不用,但是強烈建議用,因為當一個工程的代碼量很大時,沒有頭文件就相當于沒有了頭。所以是很重要的。

#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);

到此,關于“如何使用C語言實現三子棋游戲”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

偏关县| 中宁县| 广南县| 会理县| 招远市| 什邡市| 长沙市| 平阳县| 法库县| 台州市| 天津市| 延庆县| 丹巴县| 湖南省| 禄劝| 彭泽县| 连南| 尚志市| 梧州市| 文化| 钟祥市| 山阴县| 柘荣县| 雷山县| 和顺县| 阿拉善盟| 云和县| 开江县| 平江县| 营山县| 中西区| 伊吾县| 平塘县| 洪湖市| 信丰县| 建瓯市| 隆化县| 宜川县| 瑞金市| 清水河县| 呼伦贝尔市|