欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

三子棋含義:

三子棋是黑白棋的一種。三子棋又叫九宮棋、圈圈叉叉、一條龍、井字棋等。將正方形對角線連起來,相對兩邊依次擺上三個雙方棋子,只要將自己的三個棋子走成一條線,對方就算輸了。但是,有很多時候會出現(xiàn)和棋的情況。圖例如下:

基本思路:

1.創(chuàng)建用戶交互菜單界面

2.初始化棋盤

3.顯示棋盤面板(為了不重復(fù)顯示棋盤,使用清屏操作)

4.用戶落子

5.判斷勝負(fù)

6.電腦隨機(jī)正確落子

7.判斷勝負(fù)

(在每次寫程序之前,可以向如下圖所示,寫出思路或偽代碼

創(chuàng)建多文件項(xiàng)目:

寫代碼之前,首先建立三個文件,以方便后序代碼更加完整清晰地呈現(xiàn)。

1.創(chuàng)建用戶交互菜單界面

void Meau(){
 printf("+------ meau ----------+\n");
 printf("|----  1.play  --------|\n");
 printf("|----  0.quit  --------|\n");
 printf("+----------------------+\n");
}

2.初始化棋盤

使用宏定義,將棋盤中的內(nèi)容初始化為空。

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;
  }
 }
}

3.顯示棋盤面板

為了不重復(fù)顯示棋盤,使用清屏操作,使得每次現(xiàn)實(shí)的棋盤只有一張。

通過不斷調(diào)試,使得最終界面,與預(yù)期所需界面一致。

static void ShowBoard(char board[][COL],int row,int col){
 system("cls");//清屏操作
 printf("  ");
 for (int i = 0; i < col; i++){
  printf(" %3d", i + 1);
 }
 printf("\n----------------\n");
 for (int i = 0; i < row; i++){
  printf("%-2d", i + 1);
  for (int j = 0; j < col; j++){
   printf("| %c ", board[i][j]);
  }
  printf("\n----------------\n");
 }
}

4.用戶落子

落子只能落在為空的位置上,所以在落子前需要判空,若為空,則落子,否則提示重新落子。

static void PlayerMove(char board[][COL], int row, int col){
 int x = 0;
 int y = 0;
 while (1){
  printf("please enter your postion<x,y>: ");
  scanf("%d %d", &x, &y);
  if (x<1 || x>3 || y<1 || y>3){
   printf("Postion Error!");
   continue;
  }
  if (board[x - 1][y - 1] == INIT){
   board[x - 1][y - 1] = WHITE;
   break;
  }
  else{
   printf("Postion Is Not Empty!\n");
  }
 }
}

5.電腦隨機(jī)正確落子

使用隨機(jī)數(shù),在正確位置落子。

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; 
  }
 }
}

6.判斷勝負(fù)

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[0][0] != INIT){
  return board[0][0];
 }
 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;
}

7.創(chuàng)建Game界面

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("it ends in a draw\n"); 
  break;
 defult:
  printf("bug\n");
  break;
 }
}

完整代碼

//main.c文件
#include"game.h"
 
void Meau(){
 printf("+------ meau ----------+\n");
 printf("|----  1.play  --------|\n");
 printf("|----  0.quit  --------|\n");
 printf("+----------------------+\n");
}
int main(){
 int select = 0;
 int quit = 0;
     while (!quit)
  {
   Meau();
   printf("please enter your choose: ");
   scanf("%d", &select);
   switch (select)
   {
   case 1:
    Game();
    break;
   case 0:
    quit = 1;
    break;
   defult:
    printf("Select 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;
  }
 }
}
static void ShowBoard(char board[][COL],int row,int col){
 system("cls");
 printf("  ");
 for (int i = 0; i < col; i++){
  printf(" %3d", i + 1);
 }
 printf("\n----------------\n");
 for (int i = 0; i < row; i++){
  printf("%-2d", i + 1);
  for (int j = 0; j < col; j++){
   printf("| %c ", board[i][j]);
  }
  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[0][0] != INIT){
  return board[0][0];
 }
 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;
 while (1){
  printf("please enter your postion<x,y>: ");
  scanf("%d %d", &x, &y);
  if (x<1 || x>3 || y<1 || y>3){
   printf("Postion Error!");
   continue;
  }
  if (board[x - 1][y - 1] == INIT){
   board[x - 1][y - 1] = WHITE;
   break;
  }
  else{
   printf("Postion 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("it ends in a draw\n"); 
  break;
 defult:
  printf("bug\n");
  break;
 }
}
 
//game.h文件
#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
#include<windows.h>
#pragma warning(disable:4996)
#define ROW 3
#define COL 3
 
#define INIT ' '
#define WHITE 'X'//player
#define BLACK 'O'//computer
 
#define DRAW 'D'
#define NEXT 'N'
extern void Game();
#endif

代碼結(jié)果顯示

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

相關(guān)文章

  • 使用C語言實(shí)現(xiàn)字符串左旋和右旋問題

    使用C語言實(shí)現(xiàn)字符串左旋和右旋問題

    這篇文章主要介紹了使用C語言實(shí)現(xiàn)字符串左旋和右旋問題,需要的朋友可以參考下
    2018-07-07
  • C/C++獲取鍵盤事件的方法

    C/C++獲取鍵盤事件的方法

    今天小編就為大家分享一篇C/C++獲取鍵盤事件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C語言實(shí)現(xiàn)掃雷游戲(可以自動展開)

    C語言實(shí)現(xiàn)掃雷游戲(可以自動展開)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)掃雷游戲,可以自動展開,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • c語言?指針零基礎(chǔ)講解

    c語言?指針零基礎(chǔ)講解

    指針是指向另一個變量的變量。意思是一個指針保存的是另一個變量的內(nèi)存地址。換句話說,指針保存的并不是普通意義上的數(shù)值,而是另一個變量的地址值。一個指針保存了另一個變量的地址值,就說這個指針“指向”了那個變量
    2022-02-02
  • C語言實(shí)現(xiàn)頁面置換算法

    C語言實(shí)現(xiàn)頁面置換算法

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)頁面置換算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語言實(shí)現(xiàn)雙人貪吃蛇游戲?qū)嵗a

    C語言實(shí)現(xiàn)雙人貪吃蛇游戲?qū)嵗a

    大家好,本篇文章主要講的是C語言實(shí)現(xiàn)雙人貪吃蛇游戲?qū)嵗a,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++ map與set封裝實(shí)現(xiàn)過程講解

    C++ map與set封裝實(shí)現(xiàn)過程講解

    set set是一種關(guān)聯(lián)式容器,下面這篇文章主要給大家介紹了關(guān)于C++中map和set使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-03-03
  • 貪吃蛇游戲C++命令行版實(shí)例代碼

    貪吃蛇游戲C++命令行版實(shí)例代碼

    這篇文章主要介紹了貪吃蛇游戲C++命令行版實(shí)例代碼,包含了常見的循環(huán)語句及相關(guān)游戲規(guī)則的判定方法,有助于更好的理解游戲設(shè)計(jì)原理,需要的朋友可以參考下
    2014-09-09
  • C語言動態(tài)順序表實(shí)例代碼

    C語言動態(tài)順序表實(shí)例代碼

    大家好,本篇文章主要講的是C語言動態(tài)順序表實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C語言實(shí)現(xiàn)停車場項(xiàng)目

    C語言實(shí)現(xiàn)停車場項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)停車場項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論