mfc課程設計五指棋
『壹』 數據結構課程設計 編寫一個五子棋的程序 實現人與機對下的功能。
應該沒人會幫你寫、、聽說貌似用到人工智慧、、
『貳』 需要一個基於MFC程序設計的小游戲,例如飛機大戰,五子棋,最好是rar的,不要貪吃蛇。望好心人大神給個。
基於MFC程序設計的小游戲,
開發語言是么.
『叄』 五子棋的課程設計思路
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>using namespace std;int ChessData[15][15] ={0};
int GuangbiaoData[2]={8,8};
int ChessStepData[255][2]={0};
void gotoxy(int x, int y) //gotoxy在TC中是在system.h庫文件里的一個函數,但是在VC中沒有這個函數,所以在網上找到了這個函數以實現同樣的功能。
//只有這一個函數是網上找的,別的全部我自己寫的。
{
COORD c;
c.X=x-1;
c.Y=y-1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}void GotoChess(int x,int y)
{
x=3*x-2;y=2*y-1;
gotoxy(x,y);
}void Move(int MoveData) //輸入參數為用戶輸入的方向(1表示上,2表示下,3表示左,4表示右)
{
switch (MoveData)
{
case 1:GuangbiaoData[1]-=1;break;
case 2:GuangbiaoData[1]+=1;break;
case 3:GuangbiaoData[0]-=1;break;
case 4:GuangbiaoData[0]+=1;break;
default:cout<<"Move函數出錯"<<endl;
}
GotoChess(GuangbiaoData[0],GuangbiaoData[1]);
}int Get(int *data) //該函數的功能是用戶的按鍵,並轉化為01234567(0表示輸入錯誤,1表示上,2表示下,3表示左,4表示右,5表示落子,6表示悔棋,7表示退出。)
{ //並返回輸入的用戶號碼(共同鍵返回3),錯誤則返回0
int temp;temp=getch();
if (temp==224)
{
temp=getch();
switch (temp)
{
case 72:*data=1;break;
case 80:*data=2;break;
case 75:*data=3;break;
case 77:*data=4;break;
default:printf("Get函數出錯");
}
return 2;
}
else
{
switch (temp)
{
case 'w':
case 'W':*data=1;return 1;break;
case 's':
case 'S':*data=2;return 1;break;
case 'a':
case 'A':*data=3;return 1;break;
case 'd':
case 'D':*data=4;return 1;break;
case 13 :*data=5;return 2;break;
case 32 :*data=5;return 1;break;
case 8 :*data=6;break;
case 27 :*data=7;break;
default:*data=0 ;return 0;break;
}
return 3;
}
}
void MoveToEnd()
{
gotoxy(1,30);
}
int LogicBeOut(int a,int b)
{
if (a==-1||a==15||b==-1||b==15) return 1;
else return 0;
}
int win(int v)
{
int i=1,j=1,a=0,b=0;
while (ChessData[a=GuangbiaoData[0]-i-1][b=GuangbiaoData[1]-i-1]==v*2&&!LogicBeOut(a,b)) i++;
while (ChessData[a=GuangbiaoData[0]+j-1][b=GuangbiaoData[1]+j-1]==v*2&&!LogicBeOut(a,b)) j++;
if (i+j-1>=5) return 1;i=1,j=1,a=0,b=0;
while (ChessData[a=GuangbiaoData[0]+i-1][b=GuangbiaoData[1]-i-1]==v*2&&!LogicBeOut(a,b)) i++;
while (ChessData[a=GuangbiaoData[0]-j-1][b=GuangbiaoData[1]+j-1]==v*2&&!LogicBeOut(a,b)) j++;
if (i+j-1>=5) return 1;i=1,j=1,a=0,b=0;
while (ChessData[a=GuangbiaoData[0]-i-1][b=GuangbiaoData[1]-1]==v*2&&!LogicBeOut(a,b)) i++;
while (ChessData[a=GuangbiaoData[0]+j-1][b=GuangbiaoData[1]-1]==v*2&&!LogicBeOut(a,b)) j++;
if (i+j-1>=5) return 1;i=1,j=1,a=0,b=0;
while (ChessData[a=GuangbiaoData[0]-1][b=GuangbiaoData[1]-i-1]==v*2&&!LogicBeOut(a,b)) i++;
while (ChessData[a=GuangbiaoData[0]-1][b=GuangbiaoData[1]+j-1]==v*2&&!LogicBeOut(a,b)) j++;
if (i+j-1>=5) return 1;
return 0;
}void NewShow() //新棋局的開始
{
int i,j;
for (i=0;i<15;i++)
for (j=0;j<15;j++)
ChessData[i][j]=0;
system("cls");
for (i=1;i<=29;i++)
{
for (j=1;j<=43;j++)
if(i%2==1) cout<<'-';
else if (j%3==1) cout<<'|';
else cout<<' ';
cout<<endl;
}
GuangbiaoData[0]=8;GuangbiaoData[1]=8;
MoveToEnd();
cout<<"現在請用戶1下棋 "<<endl;
cout<<"用戶1使用 w,s,a,d移動游標,空格鍵落子"<<endl;
cout<<"用戶2使用各方向鍵移動游標,回車鍵落子"<<endl;
cout<<"按下Backspace鍵悔棋,按下esc返回主菜單"<<endl;
GotoChess(8,8);
}int BeOut(int data)
{
int Xiuzheng[2],New[2];
switch (data)
{
case 1:Xiuzheng[0]=0;Xiuzheng[1]=-1 ;break;
case 2:Xiuzheng[0]=0;Xiuzheng[1]=1;break;
case 3:Xiuzheng[0]=-1;Xiuzheng[1]=0;break;
case 4:Xiuzheng[0]=1;Xiuzheng[1]=0 ;break;
case 5:Xiuzheng[0]=0;Xiuzheng[1]=0 ;break;
default:printf("BeOut函數出錯");
}
New[0]=GuangbiaoData[0]+Xiuzheng[0];
New[1]=GuangbiaoData[1]+Xiuzheng[1];
if (New[0]>15||New[0]<1||New[1]>15||New[1]<1) return 1;
else return 0;
}void UserChoose(int * choice)
{
system("cls");
printf("________________________________________________________________________________");
printf("________________________________________________________________________________");
printf(" $1.單人游戲 ");
printf(" 2.雙人游戲 ");
printf(" 3.退出遊戲 ");
printf(" 4.游戲幫助 ");
printf("________________________________________________________________________________");
printf("________________________________________________________________________________");
printf(" ");
printf(" 開心五子棋 ");
printf(" ");
printf(" 出品人:張雲聰 ");
printf(" 學號:067108034 ");
printf(" 指導老師:邵艷玲 ");
printf(" ");
printf(" ");
printf(" 溫馨提示,游戲時請把窗口最大化,以達到最佳效果 ");
printf("________________________________________________________________________________");
int temp=0,i=0;
do
{
if ((temp=getch())==224)
{
temp=getch();
if (temp==72&&i!=0)
{
gotoxy(34,3+i);
printf(" ");
i--;
gotoxy(34,3+i);
printf("$");
gotoxy(0,0);
}
else if(temp==80&&i!=3)
{
gotoxy(34,3+i);
printf(" ");
i++;
gotoxy(34,3+i);
printf("$");
gotoxy(0,0);
}
} else if (temp==13) {*choice=i+1;return;}
else if (temp==27) exit(1);
else if (temp=='1'||temp=='2'||temp=='3'||temp=='4') {*choice=temp-48;return;}}while(1);
}int CannotDo(int v1,int v2,int MoveData,int choice) //第一個輸入值為按鍵的用戶號,第二個是本應該按鍵的用戶號,第三個為按下鍵的對應值,第四個鍵代表游戲模式。
{
if (v1==3) return 0; //如果用戶輸入的為共用按鍵,則CannotDo為假else if (v1==0) return 1;//如果用戶輸入錯誤,則CannotDo為真
else if (v1!=v2&&choice==2) return 1; //如果不該此用戶輸入,而用戶進行了輸入,則CannotDo為真if (BeOut(MoveData)) return 1; //如果移動出邊界則CannotDo為真
return 0;
}int CannotLuozi() //判斷是否可以落子。
{
if (ChessData[GuangbiaoData[0]-1][GuangbiaoData[1]-1])
return 1;
else return 0;
}int luozi(int v) //玩家v落子。
{
ChessData[GuangbiaoData[0]-1][GuangbiaoData[1]-1]+=v*2;
if (v==1) cout<<'O';
else if (v==2) cout<<'X';
else cout<<"luozi函數出錯";
if (win(v)) {MoveToEnd();printf("玩家%d獲得了勝利! \n",v);for (int i=1;i<=240;i++) cout<<' ';GotoChess(GuangbiaoData[0],GuangbiaoData[1]);getch();return 1;}
MoveToEnd();
cout<<"現在請用戶"<<v%2+1<<"下棋 ";
GotoChess(GuangbiaoData[0],GuangbiaoData[1]);
return 0;
}void HuiQi(int step) //輸入的是當前的要悔的棋是第幾步
{
GuangbiaoData[0]=ChessStepData[step-1][0];
GuangbiaoData[1]=ChessStepData[step-1][1];
ChessData[GuangbiaoData[0]-1][GuangbiaoData[1]-1]=0;
GotoChess(GuangbiaoData[0],GuangbiaoData[1]);
printf("-");
MoveToEnd();
cout<<"現在請用戶"<<(step+1)%2+1<<"下棋 ";
GotoChess(GuangbiaoData[0],GuangbiaoData[1]);
}int DataGetAndChoose(int choice)
{
int MoveData=0,i=0,temp; //MoveData 0表示不可移動,1表示上,2表示下,3表示左,4表示右,5表示落子,6表示悔棋,7表示退出。
while(1)
{
loop: while (temp=Get(&MoveData),CannotDo(temp,i%2+1,MoveData,choice));
switch (MoveData)
{
case 1:
case 2:
case 3:
case 4:Move(MoveData);break;
case 7:return 0;
case 6:
if (i==0) {MoveToEnd();printf("現在無法悔棋 ");GotoChess(GuangbiaoData[0],GuangbiaoData[1]);}
else HuiQi(i--);
break;
case 5:
if (CannotLuozi()) goto loop;
if(luozi(i%2+1)) return 0;
ChessStepData[i][0]=GuangbiaoData[0];
ChessStepData[i][1]=GuangbiaoData[1];
i++;
break;
default:printf("DataGetAndChoose函數出錯");break;
}
}
return 1;
}void ShowHelp()
{
system("cls");
printf("********************************************************************************");
printf("********************************************************************************");
printf("****** 單人游戲供用戶一個人自己與自己下棋研究棋局之用 ******");
printf("****** 雙人游戲中,用戶1使用wsad控制方向,按空格落子 ******");
printf("****** 用戶2按方向鍵控制方向,回車鍵落子 ******");
printf("****** 游戲過程中按esc返回主菜單 ******");
printf("****** 游戲過程中退格鍵悔棋 ******");
printf("****** 雙人模式中某人下棋時,另一個用戶無法控制游標與落子 ******");
printf("****** ******");
printf("****** 幫助 ******");
printf("****** 按任意鍵返回 ******");
printf("********************************************************************************");
printf("********************************************************************************");
getch();
}int main()
{
int choice=0;
system("color 5b");
choose: UserChoose(&choice);
if (choice<1||choice>4) goto choose;
if (choice==3) {printf("\n謝謝您的使用,再見 "); getch();return 0;}
if (choice==4) {ShowHelp(); goto choose;}
NewShow();
DataGetAndChoose(choice);
main();
return 0;
}//這段代碼已經實現了悔棋。
『肆』 求數據結構課程設計 五子棋小游戲 (1)實現五子棋的人人對局功能;(2)實現實現五子棋的人機對局功能 謝
你可以去網路找找看
『伍』 怎樣在MFC五子棋程序中加入背景圖
利用已有的C++基礎,結合對MFC的學習,進行窗口化設計。由於MFC提供了MFCppWizard自動生成框架。使得簡單的編程更加簡單,界面簡潔。
這次用MFC設計了一個簡單的五子棋游戲。可以進行簡單的雙人對戰。目的在於更加熟悉MFC的使用來完成游戲的製作。再此期間,搜集大量信息,以及函數的源代碼。不斷進行整合,進行函數構造。
2主要功能
MFC的窗口更適合小型游戲的界面。五子棋可以說是再簡單不過的小游戲了,不過其中確包含了大量的函數實現游戲的正常運轉。
若要是游戲順利進行,必須要有程序約束游戲規則。因此本游戲要解決,棋子所放位置的判斷,棋子顏色的區分,以及玩家的輸贏。解決這些問題,玩家便可以進行一場二人大戰了。
3. 設計過程中的經驗與教訓
本次游戲設計,所遇到的阻力比較大。經過多次返工。多次函數未能定義或實現。整個設計過程所學的東西也很多。以五子棋游戲為例。首先要知道其基本規則,並設法用不同的函數來解決規則的限定。設計過程中常常會出現函數已經構造,卻未加定義的情況。做本游戲時,查看了大量資料。在棋盤的畫法上有所糾結。是直接將棋盤背景圖直接加入還是調用函數進行棋盤繪制都是要考慮的。
經過多次嘗試,不斷進行函數的調試和界面圖標的設計。最終完成此次實驗。雖然多次返工,雖然有一天從早上做到第二天凌晨5點,但最終的成功,使這些都變成浮雲。不斷嘗試,永不放棄,最終一定成功。
4. 自己收獲與不足
此次實驗初期,本計劃完成一個比較優秀的作品,但最終多種原因沒有達到預期理想的界面。首先談談收獲,個人認為此次MFC課程設計更適合簡單游戲的設計。五子棋的界面簡單,相對規則也不多。設計過程中,最大的收獲要算程序的擴充,函數的調試。其實MFC已給出框架,所要做的便是填充內容。懂得了以點陣圖的形式表示棋子,以cusor替換當前滑鼠。還有滑鼠熱點的設置。在BOOL CMainFrame下構造函數以坐標的形式以改變棋盤大小。同時構造出一系列畫棋盤,判斷滑鼠,判斷輸贏等函數。為函數添加數據成員並使其一一實現。對相應菜單進行屬性更改並進行消息映射,建立響應函數。整個過程都得到了了解及應用。
同時,不足也很多,本游戲調用函數進行了棋盤繪制,使得界面過於簡單。由於時間,能力等問題,未能加入人工智慧實現人機對戰。而且對於老師所給出的對話框的設計及應用也未能加入。棋子的點陣圖都是自己繪制,並不十分美觀。
『陸』 c++課程設計,五子棋,用MFC中的東西,本人不會
求VC++MFC五子棋製作教程
不是很難吧以前做過的首先是畫棋盤然後處理滑鼠單擊事件然後判斷何時為贏大致思想如此
不是很難吧以前做過的首先是畫
『柒』 C#課程設計設計五子棋的棋盤怎麼設計
你是要作什麼界面的啊?如果是圖形界面一張圖就可以了,如果是字元界面就畫線。
『捌』 課程設計用C++做一個五子棋游戲,要有設計思路,所參考文獻
涉及人工智慧,和鏈表,建議閱讀美國Tom M.Mitchell寫的machine learning(純英文的文獻),如果想做的更好則需要資料庫的配合
設計思路很簡單明了啊,就是一個19*19的棋盤界面,人工智慧的強度(就是電腦對戰時的難度),演算法上會涉及博弈演算法。
更具你給的分只能將這么多
『玖』 各位大俠,我正在做C++ 課程設計,MFC我有現成的完整的代碼,和實驗報告,但是我很多地方演算法不懂
已發郵箱