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

C語言實現(xiàn)簡單的三子棋

 更新時間:2020年11月11日 08:42:18   作者:一顆蘋果.  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的三子棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

一、主要思想

1、創(chuàng)建一個3*3的棋盤(使用字符數(shù)組)
2、初始化棋盤(用空格填充)
3、打印棋盤(使其有可見的邊框)
4、玩家落子,用x表示(檢驗是否越界,是否已經(jīng)落子,是否贏)
5、電腦落子,用o表示(檢驗是否已經(jīng)落子,是否贏)  注:電腦在有效范圍內(nèi)隨機落子,使用當前時間戳設(shè)置隨機種子即srand(time(0))
6、三種情況:玩家贏,電腦贏,和棋

二、代碼實現(xiàn)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//定義宏,棋盤的最大行數(shù)和最大列數(shù)為3
#define MAX_ROW 3
#define MAX_COL 3
 
//無論是玩家落子還是電腦落子,都需確定落子的行和列,以此確定在棋盤上的位置
 
//玩家落子
//玩家輸入之后,需要檢驗是否輸入越界,該位置是否已經(jīng)落子
//若無這兩種情況,就將該位置賦值為'x',否則重新輸入
char playermove(char chessboard[MAX_ROW][MAX_COL])
{
 int row = 0;
 int col = 0;
 while (1){
 printf("請輸入您落子的位置:(row col)");
 scanf("%d %d", &row, &col);
 //校驗
 //校驗輸入是否輸入有誤
 if (row < 0 || row >= MAX_ROW || col<0 || col>=MAX_COL){
 printf("您的輸入越界!!\n");
 continue;
 }else if (chessboard[row][col]!=' '){
 printf("該位置已落子!!\n");
 continue;
 }else{
 chessboard[row][col] = 'x';
 return chessboard[row][col];
 }
 
 }
}
 
//電腦落子
//需要檢驗該位置是否落子(無需檢驗是否越界,因為我們設(shè)置的落子范圍為有效范圍)
//若無以上情況,就將該位置賦值為'o',否則,重新獲取隨機值
void computermove(char chessboard[MAX_ROW][MAX_COL])
{
 while (1){
 int row = rand() % MAX_ROW;   //獲取一個0~2范圍內(nèi)的隨機行數(shù)
 int col = rand() % MAX_COL;   //獲取一個0~2范圍內(nèi)的隨機列數(shù)
 //校驗落子位置是否已經(jīng)落子
 if (chessboard[row][col] != ' '){
 continue;
 }
 chessboard[row][col] = 'o';
 break;
 }
 
}
 
//判斷是否為和棋,即判斷棋盤是否滿
//找到空格代表未滿,找不到,則滿了(因為我們初始化的時候?qū)⑵灞P初始化為空格' ')
//滿返回1,未滿返回0
char isFull(char chessboard[MAX_ROW][MAX_COL])
{
 for (int row = 0; row < MAX_ROW; row++){
 for (int col = 0; col < MAX_COL; col++){
 //找到空格
 if (chessboard[row][col] == ' '){
 return 0;
 }
 }
 }
 //未找到,即滿了
 return 1;
}
 
//判斷是否贏
//'x'表示玩家獲勝
//'o'表示電腦獲勝
//' '表示勝負未分
//'h'表示和棋
char isWin(char chessboard[MAX_ROW][MAX_COL])
{
//同一行相同
//注意:相同應(yīng)排除空格相同的情況,以下同
 for (int row = 0; row < MAX_ROW; row++){
 if (chessboard[row][0]!=' '
 &&(chessboard[row][0] ==chessboard[row][1])
 &&(chessboard[row][0]== chessboard[row][2])){
 return chessboard[row][0];
 }
 }
//同一列相同
 for (int col = 0; col < MAX_COL; col++){
 if (chessboard[0][col]!=' '
 &&(chessboard[0][col] == chessboard[1][col])
 &&(chessboard[0][col] == chessboard[2][col])){
 return chessboard[0][col];
 }
 }
//對角線相同
 if (chessboard[0][0] != ' '
 && (chessboard[0][0] == chessboard[1][1])
 && (chessboard[0][0] == chessboard[2][2])){
 return chessboard[0][0];
 }
 if (chessboard[0][2] != ' ' 
 &&(chessboard[0][2] == chessboard[1][1])
 &&(chessboard[0][2] == chessboard[2][0])){
 return chessboard[0][2];
 }
//和棋
 if (isFull(chessboard)){
 return 'h';
 }
 return ' ';
}
 
//初始化棋盤,初始化為空格' '
void init(char chessboard[MAX_ROW][MAX_COL])
{
 for (int row = 0; row < MAX_ROW; row++){
 for (int col = 0; col < MAX_COL; col++){
 chessboard[row][col] = ' ';
 }
 }
}
//打印棋盤
void printchessboard(char chessboard[MAX_ROW][MAX_COL])
{
 printf("+---+---+---+\n");
 for (int row = 0; row < MAX_ROW; row++){
 printf("| %c | %c | %c |\n", chessboard[row][0], chessboard[row][1], chessboard[row][2]);
 printf("+---+---+---+\n");
 }
 
}
 
//游戲
void game()
{
 char chessboard[MAX_ROW][MAX_COL] = {0};
 init(chessboard);//初始化棋盤
 char winner = ' ';
 while (1){
 printchessboard(chessboard);//打印棋盤
 playermove(chessboard);//玩家落子
 //校驗,是否贏是否和棋
 winner = isWin(chessboard);
 if (winner != ' '){
 break;
 }
 computermove(chessboard);//電腦落子
 winner = isWin(chessboard);
 if (winner != ' '){
 break;
 }
 }
 if (winner == 'x'){
 printchessboard(chessboard);
 printf("恭喜您贏了!\n");
 }else if (winner == 'o'){
 printchessboard(chessboard);
 printf("很遺憾您輸了!\n");
 }else if (winner == 'h'){
 printchessboard(chessboard);
 printf("和棋!您和電腦棋技相當~\n");
 }
}
 
//菜單
int menue(int choice)
{
 printf("************************\n");
 printf("1.開始游戲\n");
 printf("0.結(jié)束游戲\n");
 printf("************************\n");
 printf("請輸入您的選擇:");
 scanf("%d", &choice);
 return choice;
}
 
//主函數(shù)
int main()
{
 srand(time(0));
 int choice = 0;
 while (1){
 choice=menue(choice);
 if (choice == 1){
 game();
 }else if (choice == 0){
 break;
 }else{
 printf("您的輸入有誤,請重新輸入\n");
 continue;
 }
 }
 system("pause");
 return 0;
}

三、運行結(jié)果

大概框架如此,也可以進行優(yōu)化,比如system("cls")清屏等

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

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

相關(guān)文章

  • C++實現(xiàn)廣度優(yōu)先遍歷圖

    C++實現(xiàn)廣度優(yōu)先遍歷圖

    這篇文章主要為大家詳細介紹了C++實現(xiàn)廣度優(yōu)先遍歷圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++11右值引用和轉(zhuǎn)發(fā)型引用教程詳解

    C++11右值引用和轉(zhuǎn)發(fā)型引用教程詳解

    這篇文章主要介紹了C++11右值引用和轉(zhuǎn)發(fā)型引用教程詳解,需要的朋友可以參考下
    2018-03-03
  • C語言小項目計時器的實現(xiàn)思路(倒計時+報警提示)

    C語言小項目計時器的實現(xiàn)思路(倒計時+報警提示)

    這篇文章主要介紹了C語言小項目計時器(倒計時+報警提示)的實現(xiàn)思路,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • Qt中CQGUI框架之陰影圓角窗口實現(xiàn)

    Qt中CQGUI框架之陰影圓角窗口實現(xiàn)

    這篇文章主要介紹了Qt中CQGUI框架之陰影圓角窗口實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++ 詳細講解對象的構(gòu)造順序

    C++ 詳細講解對象的構(gòu)造順序

    對象的構(gòu)造往往和構(gòu)造函數(shù)會牽扯在一起,構(gòu)造函數(shù)的函數(shù)可能會由非常復(fù)雜的邏輯所組成,不同類的構(gòu)造函數(shù)的程序邏輯很可能是相互依賴的,當這種相互依賴一旦成立,那么對象的構(gòu)造順序很可能導(dǎo)致難以調(diào)試的Bug出現(xiàn)
    2022-04-04
  • C++基本用法實踐之智能指針詳解

    C++基本用法實踐之智能指針詳解

    為了減少手動管理內(nèi)存帶來的困擾,c++提出了智能指針,可以幫助我們進行內(nèi)存管理,下面小編就來和大家簡單聊聊C++中智能指針的基本用法吧
    2023-07-07
  • C++詳細講解print緩沖區(qū)的刷新

    C++詳細講解print緩沖區(qū)的刷新

    這篇文章主要介紹了print緩沖區(qū)刷新問題,實現(xiàn)代碼簡單易懂,具有很好的參考價值,希望對大家有所幫助,需要的朋友可以參考下
    2022-05-05
  • 關(guān)于C語言和命令行之間的交互問題

    關(guān)于C語言和命令行之間的交互問題

    這篇文章主要介紹了C語言和命令行之間的交互,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • C語言實現(xiàn)控制臺五子棋小游戲

    C語言實現(xiàn)控制臺五子棋小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)控制臺五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 基于c++中的默認拷貝函數(shù)的使用詳解

    基于c++中的默認拷貝函數(shù)的使用詳解

    本篇文章對c++中默認拷貝函數(shù)的使用進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05

最新評論