tft每日頭條

 > 遊戲

 > c語言超級簡單的小遊戲代碼

c語言超級簡單的小遊戲代碼

遊戲 更新时间:2024-07-21 19:22:48

/************************************************************************************

Copyright(c),

FileName: 前 井字棋

Author:某學員 Version 1.0Date:XXX

Description:C語言簡單程序

Version:2.0

Function List:

History:

<Author><time><version>

浪子2015-12-15Ver 1.0

***********************************************************************************

//思路:進入程序先選擇人機 還是人人

//進入後開始畫棋盤,用小鍵盤确定下子位置

//判斷下子情況 開始對戰

//AI編寫

//變顔色永遠是重點

#include <windows.h>

#include <stdio.h>

#include <time.h>

#include "nanhu.h"

//定義變量

int P_RowMax = 10;

int P_ColMax = 16;

int Games[3][3];//棋盤

int iPlayer;//當前 0 1 2 3 11 12 13//人人和局6,人機和局7

int GameType;//0人機先手,1人機後手,2人人,

void TitleTop3Line();//遊戲标題

void ShowFirstView();//顯示選擇目錄

void DrawTable();//畫表格

void DrawTableCell(int);//畫單元格

BOOL is_PressOk(int, int AndP = 1);//判斷當前選擇是否可以

int is_Over(int);//判斷遊戲是否結束

void CleanGame();//清空棋盤

void EasyAI();

void main()

{

int iKeyWord;//獲得的按鍵數字

int iKeyError = 10;//允許10次出錯

int iPlayFirst = 1;//1,3 電腦或者玩家1

srand((unsigned)time(NULL));

STEP1://狀态進入目錄

//進入界面,選擇對戰目錄

ShowFirstView();//選擇目錄

scanf("%d", &GameType);//獲取

if (GameType == 2)

{

iPlayFirst = 1;//選擇玩家1先手

}

else if (GameType == 1)

{

iPlayFirst = 3;//選擇電腦AI先手

}

else

{

iPlayFirst = 1;//選擇玩家1先手

}

//開始對戰

//畫棋盤,提示下子

//initTableAndGames();

STEP2://狀态開始遊戲

CleanGame();//清空

iPlayer = iPlayFirst;//默認玩家1開始

while (1)//死循環

{

STEP3://狀态運行中

DrawTable();//畫棋盤

if (iPlayer == 1 || iPlayer == 2)//玩家

{

scanf("%d", &iKeyWord);//獲取輸入數字

if (!is_PressOk(iKeyWord))//無效位置

{

iKeyError--;

if (iKeyError > 0)

goto STEP3;//正常出錯

else

{//超負荷出錯

iKeyError = 10;

goto STEP8;

}

}

}

else if (iPlayer == 3)//電腦

{

EasyAI();

}

if (!is_Over(iPlayer))//如果未結束

{

if (iPlayer == 1)

{

iPlayer = 2;

if (GameType != 2)

{

iPlayer = 3;

}

}

else

{

iPlayer = 1;

}

}

else

{

iPlayer = is_Over(iPlayer);

DrawTable();

goto STEP10;

}

printf("");

}STEP8://輸入連續錯誤,就不玩

my_RED;

printf("\n");

printf("多次輸入出錯,遊戲結束\n");

printf("\n");

my_WHITE;

goto STEPEND;

STEP10://感謝語

my_YELLOW;

printf("\n");

printf("遊戲結束,謝謝參與.\n");

printf("\n");

my_WHITE;

STEPTRY://回味區域

printf("1.再來一局.\n");

printf("2.回到菜單.\n");

my_SKYBLUE;

printf("請選擇:");

int iTry;

scanf("%d", &iTry);

if (iTry == 1)

{

goto STEP2;

}

if (iTry == 2)

{

goto STEP1;

}

my_WHITE;

STEPEND://我還會回來的!

system("pause");

}

//---------------------------------------------------------------------------

//函數名稱:TitleTop3Line

//作用:輸出标題

//輸入:暫無

//輸出:暫無

//---------------------------------------------------------------------------

void TitleTop3Line()

{

my_WHITE;

printf("┏━━━━━━━━━━━━━━━━━━━━━━┓\n");

printf("┃ ");

my_YELLOW;

printf("井字棋(圈叉棋)");

my_WHITE;

printf(" ┃\n");

printf("┣━━━━━━━━━━━━━━━━━━━━━━┫\n");

}

//---------------------------------------------------------------------------

//函數名稱:ShowFirstView

//作用:顯示目錄頁

//輸入:暫無

//輸出:暫無

//---------------------------------------------------------------------------

void ShowFirstView()

{

system("cls");

my_WHITE;

TitleTop3Line();

printf("┃ ┃\n");

printf("┃ ┃\n");

printf("┃ 請選擇遊戲模式: ┃\n");

printf("┃ ┃\n");

printf("┃ ");

MAGENTA;

printf("0. 選擇人機先手.");

my_WHITE;

printf(" ┃\n");

printf("┃ ┃\n");

printf("┃ ");

my_BLUE;

printf("1. 選擇人機後手.");

my_WHITE;

printf(" ┃\n");

printf("┃ ┃\n");

printf("┃ ");

my_GREEN;

printf("2. 選擇人人對戰.");

my_WHITE;

printf(" ┃\n");

printf("┃ ┃\n");

printf("┗━━━━━━━━━━━━━━━━━━━━━━┛\n");

my_SKYBLUE;

printf("請選擇: ");

my_WHITE;

}

//---------------------------------------------------------------------------

//函數名稱:DrawTable

//作用:刷新棋盤

//輸入:暫無

//輸出:暫無

//---------------------------------------------------------------------------

void DrawTable()

{

system("cls");

my_WHITE;

TitleTop3Line();

printf("┃ ┃\n");

printf("┃ ┃\n");

printf("┃ ");

DrawTableCell(Games[0][0]);//這裡輸入第1個[0][0]

printf("┃");

DrawTableCell(Games[0][1]);//這裡輸入第2個[0][1]

printf("┃");

DrawTableCell(Games[0][2]);//這裡輸入第3個[0][2]

printf(" 7 8 9 ┃\n");

printf("┃ ━╋━╋━ ┃\n");

printf("┃ ");

DrawTableCell(Games[1][0]);//這裡輸入第1個[1][0]

printf("┃");

DrawTableCell(Games[1][1]);//這裡輸入第2個[1][1]

printf("┃");

DrawTableCell(Games[1][2]);//這裡輸入第3個[1][2]

printf(" 4 5 6 ┃\n");

printf("┃ ━╋━╋━ ┃\n");

printf("┃ ");

DrawTableCell(Games[2][0]);//這裡輸入第1個[2][0]

printf("┃");

DrawTableCell(Games[2][1]);//這裡輸入第2個[2][1]

printf("┃");

DrawTableCell(Games[2][2]);//這裡輸入第3個[2][2]

printf(" 1 2 3 ┃\n");

printf("┃ ┃\n");

printf("┃ ┃\n");

printf("┃ ");

if (iPlayer >= 11 && iPlayer <= 12)

{

printf("恭喜 ");

DrawTableCell(iPlayer -10);

printf("玩家%d 獲得勝利! ┃\n", iPlayer-10);

}

else if(iPlayer >= 1 && iPlayer <= 2)

{

printf("現在由 ");

DrawTableCell(iPlayer);

printf("玩家%d 下子 ┃\n",iPlayer);

}

else if (iPlayer == 13)

{

printf("抱歉,您輸了,請繼續努力。 ┃\n");

}

else if (iPlayer == 6)

{

printf("和局了,握握手好朋友,請繼續努力。 ┃\n");

}

else if (iPlayer == 7)

{

printf("恭喜恭喜,您平局了AI,請繼續努力。 ┃\n");

}

printf("");

//printf(" ┃\n");

printf("┗━━━━━━━━━━━━━━━━━━━━━━┛\n");

my_SKYBLUE;

printf("請選擇: 對應的位置開始下棋: ");

my_WHITE;

}

//---------------------------------------------------------------------------

//函數名稱:DrawTableCell

//作用:畫棋子

//輸入:int iCell

//輸出:暫無

//---------------------------------------------------------------------------

void DrawTableCell(int iCell)

{

switch (iCell)

{

case 0:

{

printf(" ");

}break;

case 1:

{

my_RED;

printf("〇");

my_WHITE;

}break;

case 2:

case 3:

{

my_SKYBLUE;

printf("Ⅹ");

my_WHITE;

}

}

}

//---------------------------------------------------------------------------

//函數名稱:is_PressOk

//作用:判斷當前選擇是否可以

//輸入:int iPress,int AndP

//輸出:可以就true 否則false

//---------------------------------------------------------------------------

BOOL is_PressOk(int iPress,int AndP )

{

if (iPress >= 1 && iPress <= 9)

{

if (Games[2 - (iPress - 1 ) / 3][(iPress - 1) % 3 ] == 0)//0為 未占用

{

if (AndP)//如果參數下子 就下

{

Games[2 - (iPress - 1) / 3][(iPress - 1) % 3 ] = iPlayer;

}

return true;

}

}

return false;

}

//---------------------------------------------------------------------------

//函數名稱:is_Over

//作用:判斷是否結束

//輸入:int iPlay

//輸出:int 赢家

//---------------------------------------------------------------------------

int is_Over(int iPlay)

{

int iReturn;

//行相同 //列相同

for (int i = 0; i < 3;i )

{

//行相同 //列相同

if ((Games[i][0] == iPlay && Games[i][1] == iPlay && Games[i][2] == iPlay)

|| (Games[0][i] == iPlay && Games[1][i] == iPlay && Games[2][i] == iPlay))

{

iReturn = iPlay 10;//勝負已分

return iReturn;

}

}

if ((Games[0][0] == iPlay && Games[1][1] == iPlay && Games[2][2] == iPlay)

|| (Games[0][2] == iPlay && Games[1][1] == iPlay && Games[2][0] == iPlay))

{

iReturn = iPlay 10;//勝負已分

return iReturn;

}

//放滿了 和局

int iFull = 0;

for (int i = 0; i < 9; i )

{

if(*(&Games[0][0] i) != 0)

iFull ;

}

if (iFull == 9)

{

if (GameType == 2)

{

iReturn = 6;

return iReturn;

}

else

{

iReturn = 7;

return iReturn;

}

}

return 0;

}

//---------------------------------------------------------------------------

//函數名稱:CleanGame

//作用:清空棋盤

//輸入:暫無

//輸出:暫無

//---------------------------------------------------------------------------

void CleanGame()

{

//int *p = &Games[0][0];

for (int i = 0; i < 9; i )

{

*(&Games[0][0] i) = 0;

}

}

//---------------------------------------------------------------------------

//函數名稱:EasyAI

//作用:簡單人工智能

//輸入:暫無

//輸出:暫無

//---------------------------------------------------------------------------

void EasyAI()

{

//搶勝

for (int i = 0; i < 9; i )

{

if (*(&Games[0][0] i) == 0)

{

*(&Games[0][0] i) = 3;

if (is_Over(3) != 13)

{

*(&Games[0][0] i) = 0;

}

else

{

return;

}

}

}

//搶救

for (int i = 0; i < 9; i )

{

if (*(&Games[0][0] i) == 0)

{

*(&Games[0][0] i) = 1;

if (is_Over(1) != 11)

{

*(&Games[0][0] i) = 0;

}

else

{

*(&Games[0][0] i) = 3;

return;

}

}

}

//搶中心

if (Games[1][1] == 0)

{

Games[1][1] = 3;

return;

}

//搶四角

int Tmp[4] = { 0, 2, 6, 8 };

int Tmp2[4];

int iCount = 0;

for (int i = 0; i < 4; i )

{

if (*(&Games[0][0] Tmp[i]) == 0)

{

Tmp2[iCount ] = Tmp[i];

}

}

if (iCount)

{

iCount = rand() % iCount;

*(&Games[0][0] Tmp2[iCount]) = 3;

return;

}

//随便丢

int Tmp3[4] = { 1, 3, 5, 7 };

memcpy(Tmp, Tmp3, 9 * sizeof(int));

iCount = 0;

for (int i = 0; i < 4; i )

{

if (*(&Games[0][0] Tmp[i]) == 0)

{

Tmp2[iCount ] = Tmp[i];

}

}

if (iCount)

{

iCount = rand() % iCount;

*(&Games[0][0] Tmp2[iCount]) = 3;

return;

}

}

趕緊關注來報名更多小項目實戰吧

c語言超級簡單的小遊戲代碼(C語言小遊戲井字棋)1

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关遊戲资讯推荐

热门遊戲资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved