91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

C語言中怎樣實現三子棋游戲

發布時間:2021-06-09 09:51:42 來源:億速云 閱讀:127 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關C語言中怎樣實現三子棋游戲,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

概述

三子棋棋盤為九宮格形式,玩家和電腦分別輪流落子,若有一方有三個棋連在一起的情況則勝。

實現過程

1、玩家交互菜單創建
2、棋盤創建與初始化
3、玩家與電腦落子
4、判定勝負關系

多文件實現

頭文件 game.h

#ifndef __GAME_H__
#define __GAME_H__
 
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
 
#define ROW 3
#define COL 3
 
#define INIT ' '         //宏定義 空
#define WHITE 'X'        //Player
#define BLACK 'O'        //Computer
 
 
#define DRAW 'D'
#define NEXT 'N'
 
#pragma warning(disable:4996)
 
extern void Game();
 
#endif

源文件 main.c

#include "game.h"
 
void Menu()
{
 printf("+-------------------------------+\n");
 printf("| 1. Play              0. Exit  |\n");
 printf("+-------------------------------+\n");
}
 
int main()
{
 int select = 0;
 int quit = 0;
 while (!quit)
 {
  Menu();
  printf("Please Select# ");
  scanf("%d", &select);
  switch (select){
  case 1:
   Game();
   break;
  case 0:
   quit = 1;
   break;
  default:
   printf("Enter Error, Try Again!\n");
   break;
  }
 }
 printf("ByeBye!\n");
 system("pause");
 return 0;
}

源文件game.c

#include "game.h"
 
static void InitBoard(char board[][COL], int row, int col)     //對九宮格棋盤進行初始化
{
 for (int i = 0; i < row; i++)
    {
  for (int j = 0; j < col; j++)  //雙重循環 二維數組 矩陣
        {
   board[i][j] = INIT;             //INIT宏定義為空
  }
 }
}
 
static void ShowBoard(char board[][COL], int row, int col)  //函數 打印棋盤
{
 system("cls");     //調用dos命令窗口進行清屏操作,實現刷新棋盤
 printf(" ");
 for (int i = 0; i < col; i++)
    {
  printf("%4d", i+1);
 }
 printf("\n--------------\n");
 for (int i = 0; i < row; i++)
    {
  printf("%-2d", i+1); //2
  for (int j = 0; j < col; j++)
         {
   printf("| %c ", board[i][j]); //12
   }
  printf("\n--------------\n");
 }
}
 
static char IsEnd(char board[][COL], int row, int col)  
{
 for (int i = 0; i < row; i++)       //判斷每列是否有三子連線
    {
  if (board[i][0] == board[i][1] && \
   board[i][1] == board[i][2] && \
   board[i][0] != INIT)
        {
   return board[i][0];
  }
 }
 
 for (int j = 0; j < COL; j++)      判斷每行是否有三子連線
    {
  if (board[0][j] == board[1][j] && \
   board[1][j] == board[2][j] && \
   board[0][j] != INIT)
        {
   return board[0][j];
  }
 }
 if (board[0][0] == board[1][1] && \         //判斷右對角線是否三子連線
  board[1][1] == board[2][2] && \
  board[1][1] != INIT)
    {
  return board[1][1];
 }
 if (board[0][2] == board[1][1] && \         //判斷左對角線是否三子連線
  board[1][1] == board[2][0] && \
  board[1][1] != INIT)
    {
  return board[1][1];
 }
 for (int i = 0; i < row; i++)
   {
  for (int j = 0; j < col; j++)
       {
   if (board[i][j] == INIT)             //判空
            {       
    return NEXT;
   }
  }
 }
 return DRAW;           //平局
}
 
static void PlayerMove(char board[][COL], int row, int col)    //玩家落子
{
 int x = 0;
 int y = 0;      //定義<x,y>坐標方式實現玩家落子
 while (1)
   {
  printf("Please Enter Position <x,y># ");
  scanf("%d %d", &x, &y);
  if (x < 1 || y < 1 || x > 3 || y > 3)    //非法判斷
          {
   printf("Enter Position Error!\n");
   continue;
    }
  if (board[x - 1][y - 1] == INIT)    //當前位置為空方可落子 
          {
   board[x - 1][y - 1] = WHITE;     
   break;
       }
  else
          {
   printf("Position Is Not Empty!\n");
    }
 }
}
static void ComputerMove(char board[][COL], int row, int col)   //電腦落子
{
 while (1){
  int x = rand() % row;     
  int y = rand() % col;      //利用隨機數種子 實現電腦落子
  if (board[x][y] == INIT){
   board[x][y] = BLACK;
   break;
  }
 }
}
 
void Game()
{
 char board[ROW][COL];                //棋盤定義
 InitBoard(board, ROW, COL);          //棋盤初始化
 
 srand((unsigned long)time(NULL));     //生成隨機數種子
 char result = 0;
 while (1){
  ShowBoard(board, ROW, COL);         //顯示棋盤
  PlayerMove(board, ROW, COL);        //玩家落子
  result = IsEnd(board, ROW, COL);    //判斷游戲狀態
  if (result != NEXT){
   break;
  }
  ShowBoard(board, ROW, COL);         //顯示棋盤
  ComputerMove(board, ROW, COL);      //電腦落子
  result = IsEnd(board, ROW, COL);    //判斷游戲狀態
  if (result != NEXT){ 
   break;
  }
 }
 ShowBoard(board, ROW, COL);
 switch (result){
 case WHITE:
  printf("You Win!\n");
  break;
 case BLACK:
  printf("You Lose!\n");
  break;
 case DRAW:
  printf("You == Computer!\n");
  break;
 default:
  printf("BUG!\n"); //Do Nothing!
  break;
 }
}

三種結果展示

C語言中怎樣實現三子棋游戲

C語言中怎樣實現三子棋游戲

C語言中怎樣實現三子棋游戲

關于“C語言中怎樣實現三子棋游戲”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

喀喇沁旗| 绥芬河市| 双鸭山市| 女性| 新沂市| 平果县| 罗源县| 阿拉善左旗| 镇宁| 梓潼县| 西乌珠穆沁旗| 翁牛特旗| 安乡县| 游戏| 车致| 常熟市| 日土县| 肥东县| 天门市| 阿勒泰市| 庄河市| 泗阳县| 金山区| 万安县| 淳安县| 巴林左旗| 五寨县| 四子王旗| 库车县| 白银市| 武乡县| 疏附县| 江门市| 集安市| 白河县| 新乡县| 陵川县| 南江县| 麻阳| 扬州市| 奉节县|