pos機辦理網(wǎng)站源碼

 新聞資訊2  |   2023-07-30 21:27  |  投稿人:pos機之家

網(wǎng)上有很多關(guān)于pos機辦理網(wǎng)站源碼,C語言編寫的五子棋的知識,也有很多人為大家解答關(guān)于pos機辦理網(wǎng)站源碼的問題,今天pos機之家(www.shbwcl.net)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機辦理網(wǎng)站源碼

pos機辦理網(wǎng)站源碼

這是實現(xiàn)五子棋落子和判斷勝負的源代碼,電腦落子涉及的人工智能算法(目前AI屬于弱智的隨機落子)暫時沒有實現(xiàn)。本文重點講一下勝負判斷功能的實現(xiàn),我們都知道五子棋中獲勝的條件就是五聯(lián)子,而五聯(lián)子的方向有四種:水平、豎直和兩個對角線方向。掃描的思想是在每個落子的位置判斷各個方向能掃描的次數(shù)(最多為5)。以水平方向為例,數(shù)組下標為【5】【5】的從【5】【0】開始判斷連往右的五個坐標(即數(shù)組元素)的值是否相等,如果是則表明獲勝。 建議:如果有想學(xué)習(xí)編程的加qq群 590750544 大家一起學(xué)習(xí)交流共同進步,群里有老司機可以帶我們,有工具學(xué)習(xí)資料和教學(xué)視頻。

#include <stdio.h>

#include <stdlib.h>

#define NO_CHESS "十"

#define RED_CHESS "??"

#define BLACK_CHESS "??"

#define BOARD_SIZE 15 //定義棋盤的大小

typedef int DataType;

struct Stack

{

DataType arr[BOARD_SIZE][BOARD_SIZE];

int top;

};

//定義一個二維數(shù)組來充當(dāng)棋盤

constchar *Chesses[BOARD_SIZE][BOARD_SIZE];

//----函數(shù)的聲明-----

//初始化棋盤

void initChess(void);

//輸出棋盤

void prChess(void);

//判斷輸贏

void winJudge(char* corlor,int x,int y);

//提示獲得勝利

void printWin(char* color);

//橫向掃描函數(shù)

void horizonScan(char* color,int x,int y);

//縱向掃描函數(shù)

void verticalScan(char* color,int x,int y);

//正對角線掃描函數(shù)

void diagonalScan(char* color,int x,int y);

//反對角線掃描函數(shù)

void opposeDiagonalScan(char* color,int x,int y);

//悔棋函數(shù)

void retract();

//-----函數(shù)的實現(xiàn)-----

//初始化棋盤

void initChess(void)

{

//把每一個元素賦值為 "十" 用于控制臺畫出棋盤

for (int i =0; i<BOARD_SIZE; i++)

{

for (int k =0; k<BOARD_SIZE; k++)

{

Chesses[i][k] = NO_CHESS;

}

}

}

//輸出棋盤

void prChess(void)

{

printf(" 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14\");

//打印每個數(shù)組元素的值

for (int i =0; i<BOARD_SIZE; i++)//行

{

printf("d ",i);

for (int k =0; k<BOARD_SIZE; k++)//列

{

printf("%s ",Chesses[i][k]);

}

//換行

printf("\");

}

}

//判斷輸贏

void winJudge(char* color,int x,int y)

{

//橫向掃描

horizonScan(color, x, y);

//縱向掃描

verticalScan(color, x, y);

//對角線方向掃描

diagonalScan(color, x, y);

//反對角線方向掃描

opposeDiagonalScan(color, x, y);

}

//橫向掃描函數(shù)

void horizonScan(char* color,int x,int y)

{

//count存儲掃描的次數(shù)

int count;

//存儲變量

int sign;

if((8-abs(y-7))>4)

{

count=4;

}else{

count=7-abs(y-7);

}

//4-10列掃描五次,0和14列掃描一次;其中0列從當(dāng)前位置開始掃描,而14列從10列掃描;其他列類似

for (int i=count; i>=0; i--)

{

//前4列只能掃描到第0列,不能越界

if (y>7)

{

sign=i-4;

}else

{

sign=0-i;

}

//掃描是否五聯(lián)子

if ((*Chesses[x][y+sign]==*color)&&(*Chesses[x][y+sign+1]==*color)&&(*Chesses[x][y+sign+2]==*color)&&(*Chesses[x][y+sign+3]==*color)&&(*Chesses[x][y+sign+4]==*color))

printWin(color);

}

}

//縱向掃描函數(shù)

void verticalScan(char* color,int x,int y)

{

//count存儲掃描的次數(shù)

int count;

//存儲變量

int sign;

if((8-abs(x-7))>4)

{

count=4;

}else

{

count=7-abs(x-7);

}

//4-10行掃描五次,0和14行掃描一次;其中0行從當(dāng)前位置開始掃描,而14行列從10行掃描;其他行類似

for (int i=count; i>=0; i--)

{

//前4行只能掃描到第0行,不能越界

if (x>7)

{

sign=i-4;

}else

{

sign=0-i;

}

//掃描是否五聯(lián)子

if ((*Chesses[x+sign][y]==*color)&&(*Chesses[x+sign+1][y]==*color)&&(*Chesses[x+sign+2][y]==*color)&&(*Chesses[x+sign+3][y]==*color)&&(*Chesses[x+sign+4][y]==*color))

printWin(color);

}

}

//對角線掃描函數(shù)/Users/tarena0036/Desktop/屏幕快照 2016-05-04下午2.16.17.png

void diagonalScan(char* color,int x,int y)

{

//count用于存儲掃描的次數(shù)

int count;

//存儲變量

int sign;

//用于存儲臨時數(shù)據(jù)

int temp;

if((8-abs(x-7))>4&&(8-abs(y-7))>4)

{

count=4;

}

else if(x<11&&y<11)

{

temp=x<=y?x:y;

count=7-abs(temp-7);

}

else if (x>3&&y>3)

{

temp=x>=y?x:y;

count=7-abs(temp-7);

}

else if (abs(x-y)==10)

{

count=0;

}

else if (abs(x-y)==9)

{

count=1;

}

else if (abs(x-y)==8)

{

count=2;

}

else

{

//其他情況無需掃描

count=-1;

}

//(4-10)*(4-10)區(qū)域掃描五次,0和14行/列掃描一次;其中0行/列從當(dāng)前位置開始掃描,而14行/列從10行/列掃描;其他行類似

for (int i=count; i>=0; i--)

{

//前4行只能掃描到第0行,不能越界

if (x+y<14)

{

if (x==11||y==11)

{

sign=-(i+1);

}

else

sign=-i;

}else

{

if (x==2||y==2)

{

sign=i-2;

}

else if (x==3||y==3)

{

sign=i-3;

}

else

sign=i-4;

}

//掃描是否五聯(lián)子

if ((*Chesses[x+sign][y+sign]==*color)&&(*Chesses[x+sign+1][y+sign+1]==*color)&&(*Chesses[x+sign+2][y+sign+2]==*color)&&(*Chesses[x+sign+3][y+sign+3]==*color)&&(*Chesses[x+sign+4][y+sign+4]==*color))

printWin(color);

}

}

//反對角線掃描

void opposeDiagonalScan(char* color,int x,int y)

{

//count用于存儲掃描的次數(shù)

int count;

//存儲變量

int sign;

//用于存儲臨時數(shù)據(jù)

int temp;

if((8-abs(x-7))>4&&(8-abs(y-7))>4)

{

count=4;

}

else if(x<11&&y>3)

{

temp=(abs(x-7))>=(abs(y-7))?x:y;

count=7-abs(temp-7);

}

else if (x>3&&y<11)

{

temp=(abs(x-7))>=(abs(y-7))?x:y;

count=7-abs(temp-7);

}

else if ((x+y)==4||(x+y)==24)

{

count=0;

}

else if ((x+y)==5||(x+y)==23)

{

count=1;

}

else if ((x+y)==6||(x+y)==22)

{

count=2;

}

else

{

//其他情況無需掃描

count=-1;

}

//(4-10)*(4-10)區(qū)域掃描五次,0和14行/列掃描一次;其中0行/列從當(dāng)前位置開始掃描,而14行/列從10行/列掃描;其他行類似

for (int i=count; i>=0; i--)

{

//前4行只能掃描到第0行,不能越界

if (x>y)

{

if (x==3||y==11)

{

sign=i+1;

}

else

sign=i;

}else

{

if (x==12||y==2)

{

sign=i+2;

}

else if (x==11||y==3)

{

sign=i+3;

}

else

sign=i+4;

}

//掃描是否五聯(lián)子

if ((*Chesses[x+sign][y-sign]==*color)&&(*Chesses[x+sign-1][y-sign+1]==*color)&&(*Chesses[x+sign-2][y-sign+2]==*color)&&(*Chesses[x+sign-3][y-sign+3]==*color)&&(*Chesses[x+sign-4][y-sign+4]==*color))

printWin(color);

}

}

//悔棋功能

void retract()

{

}

//輸出獲勝信息

void printWin(char* color)

{

printf("%s Win!\",color);

//結(jié)束程序

exit(1);

}

//主函數(shù)

int main(int argc,const char * argv[])

{

//初始化二維數(shù)組,存儲棋盤坐標點的是否已經(jīng)有棋子信息

int info1[BOARD_SIZE][BOARD_SIZE]={0};

//定義棧,用于存儲坐標,悔棋時取出棧頂元素將對應(yīng)位置的點復(fù)位

//調(diào)用函數(shù)

initChess();

prChess();

//開始循環(huán)下棋

while (1)

{

int xPos;

int yPos;

menu:

printf("請輸入您下棋的坐標,如x y(輸入15 15為悔棋) \");

scanf("%d %d",&xPos,&yPos);

if (xPos>BOARD_SIZE||yPos>BOARD_SIZE)

{

printf("請在邊界內(nèi)輸入有效數(shù)字!\");

goto menu;

}

else if(xPos==BOARD_SIZE&&yPos==BOARD_SIZE)

{

retract();

}

if (1==info1[xPos][yPos])

{

printf("您輸入的位置已經(jīng)有棋子,請重新輸入:\");

goto menu;

}

//將已經(jīng)落子的點標記為1

info1[xPos][yPos]=1;

//把對應(yīng)的數(shù)組元素賦值成紅棋

Chesses[xPos][yPos] = RED_CHESS;

//刷新棋盤

prChess();

//判斷是否獲勝

winJudge(Chesses[xPos][yPos],xPos,yPos);

int macXPos,macYPos;

macPosition:

//隨機生成2個 0~15之間的數(shù)作為電腦下棋的坐標

macXPos = arc4random()%BOARD_SIZE;

macYPos = arc4random()%BOARD_SIZE;

//判斷生成的坐標的對應(yīng)的點是否已經(jīng)有棋子了

if (1==info1[macXPos][macYPos])

{

goto macPosition;

}

//將電腦下棋的坐標賦值 為 黑旗

Chesses[macXPos][macYPos] = BLACK_CHESS;

//將已經(jīng)落子的點標記為1

info1[macXPos][macYPos]=1;

//刷新棋盤

prChess();

//判斷黑棋是否獲勝

winJudge(Chesses[macXPos][macYPos],macXPos,macYPos);

}

/*

上面的代碼還涉及到如下需要改進的地方

1、用戶輸入坐標的有效性,只能是數(shù)字,不能超出棋盤的范圍(暫時沒有對整個棋盤是否落滿子進行判斷)

2、如果是已經(jīng)下棋的點,不能重復(fù)下棋(實現(xiàn))

3、每次下棋后,需要掃描誰贏了

4、悔棋功能

*/

return 0;

} 建議:如果有想學(xué)習(xí)編程的加qq群 590750544 大家一起學(xué)習(xí)交流共同進步

以上就是關(guān)于pos機辦理網(wǎng)站源碼,C語言編寫的五子棋的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機辦理網(wǎng)站源碼的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://www.shbwcl.net/newsone/91961.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實,本站將立刻刪除。