#include<graphics.h>//圖形庫頭檔案
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<mmsystem.h>//播放音樂的頭檔案
#pragma comment(lib,"winmm.lib")//
int flag=0;//下棋次數
int board[20][20]={0};
int panduan(int a,int b);
void initGame( )//初始化游戲
{
initgraph(600,400);
loadimage(NULL,"hpic728.jpg");
//背景音樂
mciSendString("open 城南花已開.mp3",0,0,0);
mciSendString("play 城南花已開.mp3",0,0,0);
//繪制棋盤
setlinecolor(BLACK);
for(int i=25;i<500;i+=25)
{
line(i,0,i,500);
line(0,i,500,i);
}
line(501,0,501,500);
outtextxy(510,100,"玩家1:黑棋");
outtextxy(510,150,"玩家2:白棋");
outtextxy(510,200,"ps:請勿在");
outtextxy(510,220," 邊緣落子");
}
//下棋
void playChess()
{
MOUSEMSG m;//滑鼠結構體
int x=0,y=0;
int a=0,b=0;
HWND hwnd=GetHWnd();
while(1)
{
m=GetMouseMsg();
for(int i=1;i<20;i++)
{
for(int j=1;j<20;j++)
{
if(abs(m.x-i*25)<12&&abs(m.y-j*25)<12)
{
x=i*25;
y=j*25;
a=i;
b=j;
}
}
}
if(m.uMsg==WM_LBUTTONDOWN)
{
if(board[a][b]!=0)
{
MessageBox (hwnd,"這里已經有棋子了,請重新選擇!","提示",MB_OK);
continue;
}
if(flag%2==0)
{setfillcolor(BLACK);
solidcircle(x,y,10);
board[a][b]=1;
}
else{
setfillcolor(WHITE);
solidcircle(x,y,10);
board[a][b]=2;
}
flag++;
if(panduan(a,b))
{
if(flag%2==0)
{
MessageBox (hwnd,"玩家2:白棋勝利","游戲結束",MB_OK);
return;
}
else
{ MessageBox (hwnd,"玩家1:黑棋勝利","游戲結束",MB_OK);
return;
}
}
}
}
}
//判斷輸贏
int panduan(int a,int b)
{
int i,j;
int t;
t=2-flag%2;
for(i=a-4,j=b;i<=a;i++)
{
if(i>=0&&i<16&&t==board[i][j]&&t==board[i+1][j]&&t==board[i+2][j]&&t==board[i+3][j]&&t==board[i+4][j])
return 1;
}
for(i=a,j=b-4;j<=b;j++)
{
if(j>=0&&j<16&&t==board[i][j]&&t==board[i][j+1]&&t==board[i][j+2]&&t==board[i][j+3]&&t==board[i][j+4])
return 1;
}
for(i=a-4,j=b-4;i<=a,j<=b;i++,j++)
{
if(i>=0&&i<16&&j>=0&&j<16&&t==board[i][j]&&t==board[i+1][j+1]&&t==board[i+2][j+2]&&t==board[i+3][j+3]&&t==board[i+4][j+4])
return 1;
}
for(i=a-4,j=b+4;i<=a,j>=1;i++,j--)
{
if(i>=0&&i<16&&j>=0&&j<16&&t==board[i][j]&&t==board[i+1][j-1]&&t==board[i+2][j-2]&&t==board[i+3][j-3]&&t==board[i+4][j-4])
return 1;
}
return 0;
}
int menu()
{
printf(" ********************************************************\n");
printf(" * 歡迎你使用本軟體 *\n");
printf(" * *\n");
printf(" * *五子棋* *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * * (1)進入游戲 *\n");
printf(" * *\n");
printf(" * * (2)退出游戲 *\n");
printf(" * *\n");
printf(" * * (3)游戲說明 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" ********************************************************\n");
printf(" 請輸入對應數字進行操作\n");
return 0;
}
int main()
{
switch(menu())
{
case 1:
initGame();break;
}
playChess();
return 0;
}
uj5u.com熱心網友回復:
用回圈呀!將開五子棋的操作放到回圈里,然后給一個觸發條件比如按Enter鍵或者設定一個按鈕,當條件成立則重新進入回圈咯uj5u.com熱心網友回復:
是放到switch里嗎
uj5u.com熱心網友回復:
switch是選擇陳述句,回圈是while()、do-while()和for()這三種
uj5u.com熱心網友回復:
用回圈呀!將開五子棋的操作放到回圈里,然后給一個觸發條件比如按Enter鍵或者設定一個按鈕,當條件成立則重新進入回圈咯
是放到switch里嗎
switch是選擇陳述句,回圈是while()、do-while()和for()這三種
大佬求詳解



uj5u.com熱心網友回復:
一看就是抄的程式,自己從基礎學起吧uj5u.com熱心網友回復:
用回圈呀!將開五子棋的操作放到回圈里,然后給一個觸發條件比如按Enter鍵或者設定一個按鈕,當條件成立則重新進入回圈咯
是放到switch里嗎
switch是選擇陳述句,回圈是while()、do-while()和for()這三種
大佬求詳解
比如你可以這樣:在main函式的開始定義一個整型變數again,用again來判斷回圈條件是否成立,初值是讓它能夠進入回圈,然后在游戲結束的時候輸入again
我重寫一下你的main函式
int main(){
int again = 1;
while(again){ //若again為0,則退出游戲
switch(menu())
{
case 1:
initGame();break;
}
playChess();
scanf("%d",&again);
}
return 0;
}
uj5u.com熱心網友回復:
用回圈呀!將開五子棋的操作放到回圈里,然后給一個觸發條件比如按Enter鍵或者設定一個按鈕,當條件成立則重新進入回圈咯
是放到switch里嗎
switch是選擇陳述句,回圈是while()、do-while()和for()這三種
大佬求詳解
或者你想效果更好一點可以匯入一個<conio.h>,然后char again='\n';輸入那里改成fflush(stdin);again=getch();
uj5u.com熱心網友回復:
請問你解決了嗎,我也遇到同樣的問題
uj5u.com熱心網友回復:
6#樓的方法就可以了,選單函式menu()回傳值不是0吧,應該回傳所選擇的數字,供參考:int menu()
{
printf(" ********************************************************\n");
printf(" * 歡迎你使用本軟體 *\n");
printf(" * *\n");
printf(" * *五子棋* *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * * (1)進入游戲 *\n");
printf(" * *\n");
printf(" * * (2)退出游戲 *\n");
printf(" * *\n");
printf(" * * (3)游戲說明 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" ********************************************************\n");
printf(" 請輸入對應數字進行操作\n"); int n;
scanf("%d",&n)
return n;
}
int main()
{
int again=1;
while(again){
switch(menu())
{
case 1:
initGame(); playChess();break;
case 2:
exit(0);
case 3:
.....;break;
}
scanf("%d",&again);
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269979.html
標籤:新手樂園
上一篇:求助,用c語言打出以下字符和字母
