pos機辦理網站源碼

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

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

本文目錄一覽:

1、pos機辦理網站源碼

pos機辦理網站源碼

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

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

};

//定義一個二維數組來充當棋盤

constchar *Chesses[BOARD_SIZE][BOARD_SIZE];

//----函數的聲明-----

//初始化棋盤

void initChess(void);

//輸出棋盤

void prChess(void);

//判斷輸贏

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

//提示獲得勝利

void printWin(char* color);

//橫向掃描函數

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

//縱向掃描函數

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

//正對角線掃描函數

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

//反對角線掃描函數

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

//悔棋函數

void retract();

//-----函數的實現-----

//初始化棋盤

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\");

//打印每個數組元素的值

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

}

//橫向掃描函數

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

{

//count存儲掃描的次數

int count;

//存儲變量

int sign;

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

{

count=4;

}else{

count=7-abs(y-7);

}

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

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

{

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

if (y>7)

{

sign=i-4;

}else

{

sign=0-i;

}

//掃描是否五聯子

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

}

}

//縱向掃描函數

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

{

//count存儲掃描的次數

int count;

//存儲變量

int sign;

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

{

count=4;

}else

{

count=7-abs(x-7);

}

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

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

{

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

if (x>7)

{

sign=i-4;

}else

{

sign=0-i;

}

//掃描是否五聯子

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

}

}

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

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

{

//count用于存儲掃描的次數

int count;

//存儲變量

int sign;

//用于存儲臨時數據

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)區域掃描五次,0和14行/列掃描一次;其中0行/列從當前位置開始掃描,而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;

}

//掃描是否五聯子

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用于存儲掃描的次數

int count;

//存儲變量

int sign;

//用于存儲臨時數據

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)區域掃描五次,0和14行/列掃描一次;其中0行/列從當前位置開始掃描,而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;

}

//掃描是否五聯子

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

//結束程序

exit(1);

}

//主函數

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

{

//初始化二維數組,存儲棋盤坐標點的是否已經有棋子信息

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

//定義棧,用于存儲坐標,悔棋時取出棧頂元素將對應位置的點復位

//調用函數

initChess();

prChess();

//開始循環下棋

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("請在邊界內輸入有效數字!\");

goto menu;

}

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

{

retract();

}

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

{

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

goto menu;

}

//將已經落子的點標記為1

info1[xPos][yPos]=1;

//把對應的數組元素賦值成紅棋

Chesses[xPos][yPos] = RED_CHESS;

//刷新棋盤

prChess();

//判斷是否獲勝

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

int macXPos,macYPos;

macPosition:

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

macXPos = arc4random()%BOARD_SIZE;

macYPos = arc4random()%BOARD_SIZE;

//判斷生成的坐標的對應的點是否已經有棋子了

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

{

goto macPosition;

}

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

Chesses[macXPos][macYPos] = BLACK_CHESS;

//將已經落子的點標記為1

info1[macXPos][macYPos]=1;

//刷新棋盤

prChess();

//判斷黑棋是否獲勝

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

}

/*

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

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

2、如果是已經下棋的點,不能重復下棋(實現)

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

4、悔棋功能

*/

return 0;

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

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

轉發請帶上網址:http://www.www690aa.com/newsone/91961.html

你可能會喜歡:

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 babsan@163.com 舉報,一經查實,本站將立刻刪除。