當前位置:首頁 » 編程軟體 » 游戲源碼編譯

游戲源碼編譯

發布時間: 2022-01-10 04:50:43

① 編寫游戲是創建Win32 Application工程如何編譯游戲代碼,跟程序代碼一樣

那要看你用什麽庫了,要是direct和opengl兩個好像差不多,只是sdk不一樣。

② 網上的小游戲源代碼 要怎麼樣在編譯器上運行起來

看你的小游戲是基於什麼開發的
不同的源碼需要用不同的編譯器加環境的
java的 有C的 有C++的 有flash的 都不一樣的

③ 知道游戲的源代碼,怎麼通過c++編譯,最終變成可以運行的exe格式

你去下載個Microsoft Visual_Studio_6.0 來裝上.
對了建個項目. 把代碼復制進去生成一遍.
.EXE文件就在根目錄下.
我沒搞過C++ 想到原理應該是一樣的.
只是建議下.你去試下. 行再給我分吧 呵呵
我現在機子上沒裝那工具. 具體也記不得了.

④ java代碼,為什麼我寫的這個游戲編譯不通過

代碼沒看出毛病,你用的什麼編譯器,建議換個編譯器吧!

⑤ c++簡單大富翁游戲源碼編譯過程中的小問題

name指針沒有初始化,你就strcpy(name,nm);當然有問題
可以:name = new char[length];//length有nm的長度決定,然後再strcpy

⑥ 求c語言編譯小游戲的代碼,比如掃雷原代碼等

#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFTPRESS 0xff01
#define LEFTCLICK 0xff10
#define LEFTDRAG 0xff19
#define MOUSEMOVE 0xff08
struct
{
int num;/*格子當前處於什麼狀態,1有雷,0已經顯示過數字或者空白格子*/
int roundnum;/*統計格子周圍有多少雷*/
int flag;/*右鍵按下顯示紅旗的標志,0沒有紅旗標志,1有紅旗標志*/
}Mine[10][10];
int gameAGAIN=0;/*是否重來的變數*/
int gamePLAY=0;/*是否是第一次玩游戲的標志*/
int mineNUM;/*統計處理過的格子數*/
char randmineNUM[3];/*顯示數字的字元串*/
int Keystate;
int MouseExist;
int MouseButton;
int MouseX;
int MouseY;
void Init(void);/*圖形驅動*/
void MouseOn(void);/*滑鼠游標顯示*/
void MouseOff(void);/*滑鼠游標隱藏*/
void MouseSetXY(int,int);/*設置當前位置*/
int LeftPress(void);/*左鍵按下*/
int RightPress(void);/*滑鼠右鍵按下*/
void MouseGetXY(void);/*得到當前位置*/
void Control(void);/*游戲開始,重新,關閉*/
void GameBegain(void);/*游戲開始畫面*/
void DrawSmile(void);/*畫笑臉*/
void DrawRedflag(int,int);/*顯示紅旗*/
void DrawEmpty(int,int,int,int);/*兩種空格子的顯示*/
void GameOver(void);/*游戲結束*/
void GameWin(void);/*顯示勝利*/
int MineStatistics(int,int);/*統計每個格子周圍的雷數*/
int ShowWhite(int,int);/*顯示無雷區的空白部分*/
void GamePlay(void);/*游戲過程*/
void Close(void);/*圖形關閉*/
void main(void)
{
Init();
Control();
Close();
}
void Init(void)/*圖形開始*/
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
}
void Close(void)/*圖形關閉*/
{
closegraph();
}
void MouseOn(void)/*滑鼠游標顯示*/
{
_AX=0x01;
geninterrupt(0x33);
}
void MouseOff(void)/*滑鼠游標隱藏*/
{
_AX=0x02;
geninterrupt(0x33);
}
void MouseSetXY(int x,int y)/*設置當前位置*/
{
_CX=x;
_DX=y;
_AX=0x04;
geninterrupt(0x33);
}
int LeftPress(void)/*滑鼠左鍵按下*/
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&1);
}
int RightPress(void)/*滑鼠右鍵按下*/
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&2);
}
void MouseGetXY(void)/*得到當前位置*/
{
_AX=0x03;
geninterrupt(0x33);
MouseX=_CX;
MouseY=_DX;
}
void Control(void)/*游戲開始,重新,關閉*/
{
int gameFLAG=1;/*游戲失敗後判斷是否重新開始的標志*/
while(1)
{
if(gameFLAG)/*游戲失敗後沒判斷出重新開始或者退出遊戲的話就繼續判斷*/
{
GameBegain(); /*游戲初始畫面*/
GamePlay();/*具體游戲*/
if(gameAGAIN==1)/*游戲中重新開始*/
{
gameAGAIN=0;
continue;
}
}
MouseOn();
gameFLAG=0;
if(LeftPress())/*判斷是否重新開始*/
{
MouseGetXY();
if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)
{
gameFLAG=1;
continue;
}
}
if(kbhit())/*判斷是否按鍵退出*/
break;
}
MouseOff();
}
void DrawSmile(void)/*畫笑臉*/
{
setfillstyle(SOLID_FILL,YELLOW);
fillellipse(290,75,10,10);
setcolor(YELLOW);
setfillstyle(SOLID_FILL,BLACK);/*眼睛*/
fillellipse(285,75,2,2);
fillellipse(295,75,2,2);
setcolor(BLACK);/*嘴巴*/
bar(287,80,293,81);
}
void DrawRedflag(int i,int j)/*顯示紅旗*/
{
setcolor(7);
setfillstyle(SOLID_FILL,RED);
bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5);
setcolor(BLACK);
line(198+j*20,95+i*20,198+j*20,95+i*20+10);
}
void DrawEmpty(int i,int j,int mode,int color)/*兩種空格子的顯示*/
{
setcolor(color);
setfillstyle(SOLID_FILL,color);
if(mode==0)/*沒有單擊過的大格子*/
bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);
else
if(mode==1)/*單擊過後顯示空白的小格子*/
bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7);
}
void GameBegain(void)/*游戲開始畫面*/
{
int i,j;
cleardevice();
if(gamePLAY!=1)
{
MouseSetXY(290,70); /*滑鼠一開始的位置,並作為它的初始坐標*/
MouseX=290;
MouseY=70;
}
gamePLAY=1;/*下次按重新開始的話滑鼠不重新初始化*/
mineNUM=0;
setfillstyle(SOLID_FILL,7);
bar(190,60,390,290);
for(i=0;i<10;i++)/*畫格子*/
for(j=0;j<10;j++)
DrawEmpty(i,j,0,8);
setcolor(7);
DrawSmile();/*畫臉*/
randomize();__page_break__
for(i=0;i<10;i++)/*100個格子隨機賦值有沒有地雷*/
for(j=0;j<10;j++)
{
Mine[i][j].num=random(8);/*如果隨機數的結果是1表示這個格子有地雷*/
if(Mine[i][j].num==1)
mineNUM++;/*現有雷數加1*/
else
Mine[i][j].num=2;
Mine[i][j].flag=0;/*表示沒紅旗標志*/
}
sprintf(randmineNUM,"%d",mineNUM); /*顯示這次總共有多少雷數*/
setcolor(1);
settextstyle(0,0,2);
outtextxy(210,70,randmineNUM);
mineNUM=100-mineNUM;/*變數取空白格數量*/
MouseOn();
}
void GameOver(void)/*游戲結束畫面*/
{
int i,j;
setcolor(0);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if(Mine[i][j].num==1)/*顯示所有的地雷*/
{
DrawEmpty(i,j,0,RED);
setfillstyle(SOLID_FILL,BLACK);
fillellipse(200+j*20,100+i*20,7,7);
}
}
void GameWin(void)/*顯示勝利*/
{
setcolor(11);
settextstyle(0,0,2);
outtextxy(230,30,"YOU WIN!");
}
int MineStatistics(int i,int j)/*統計每個格子周圍的雷數*/
{
int nNUM=0;
if(i==0&&j==0)/*左上角格子的統計*/
{
if(Mine[0][1].num==1)
nNUM++;
if(Mine[1][0].num==1)
nNUM++;
if(Mine[1][1].num==1)
nNUM++;
}
else
if(i==0&&j==9)/*右上角格子的統計*/
{
if(Mine[0][8].num==1)
nNUM++;
if(Mine[1][9].num==1)
nNUM++;
if(Mine[1][8].num==1)
nNUM++;
}
else
if(i==9&&j==0)/*左下角格子的統計*/
{
if(Mine[8][0].num==1)
nNUM++;
if(Mine[9][1].num==1)
nNUM++;
if(Mine[8][1].num==1)
nNUM++;
}
else
if(i==9&&j==9)/*右下角格子的統計*/
{
if(Mine[9][8].num==1)
nNUM++;
if(Mine[8][9].num==1)
nNUM++;
if(Mine[8][8].num==1)
nNUM++;
}
else if(j==0)/*左邊第一列格子的統計*/
{
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i-1][j+1].num==1)
nNUM++;
if(Mine[i+1][j+1].num==1)
nNUM++;
}
else if(j==9)/*右邊第一列格子的統計*/
{
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
if(Mine[i+1][j-1].num==1)
nNUM++;
}
else if(i==0)/*第一行格子的統計*/
{
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i+1][j-1].num==1)
nNUM++;
if(Mine[i+1][j+1].num==1)
nNUM++;
}
else if(i==9)/*最後一行格子的統計*/
{
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
if(Mine[i-1][j+1].num==1)
nNUM++;
}
else/*普通格子的統計*/
{
if(Mine[i-1][j].num==1)
nNUM++;
if(Mine[i-1][j+1].num==1)
nNUM++;
if(Mine[i][j+1].num==1)
nNUM++;
if(Mine[i+1][j+1].num==1)
nNUM++;
if(Mine[i+1][j].num==1)
nNUM++;
if(Mine[i+1][j-1].num==1)
nNUM++;
if(Mine[i][j-1].num==1)
nNUM++;
if(Mine[i-1][j-1].num==1)
nNUM++;
}__page_break__
return(nNUM);/*把格子周圍一共有多少雷數的統計結果返回*/
}
int ShowWhite(int i,int j)/*顯示無雷區的空白部分*/
{
if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有紅旗或該格處理過就不對該格進行任何判斷*/
return;
mineNUM--;/*顯示過數字或者空格的格子就表示多處理了一個格子,當所有格子都處理過了表示勝利*/
if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1)/*顯示空格*/
{
DrawEmpty(i,j,1,7);
Mine[i][j].num=0;
}
else
if(Mine[i][j].roundnum!=0)/*輸出雷數*/
{
DrawEmpty(i,j,0,8);
sprintf(randmineNUM,"%d",Mine[i][j].roundnum);
setcolor(RED);
outtextxy(195+j*20,95+i*20,randmineNUM);
Mine[i][j].num=0;/*已經輸出雷數的格子用0表示已經用過這個格子*/
return ;
}
/*8個方向遞歸顯示所有的空白格子*/
if(i!=0&&Mine[i-1][j].num!=1)
ShowWhite(i-1,j);
if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1)
ShowWhite(i-1,j+1);
if(j!=9&&Mine[i][j+1].num!=1)
ShowWhite(i,j+1);
if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1)
ShowWhite(i+1,j+1);
if(i!=9&&Mine[i+1][j].num!=1)
ShowWhite(i+1,j);
if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1)
ShowWhite(i+1,j-1);
if(j!=0&&Mine[i][j-1].num!=1)
ShowWhite(i,j-1);
if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1)
ShowWhite(i-1,j-1);
}
void GamePlay(void)/*游戲過程*/
{
int i,j,Num;/*Num用來接收統計函數返回一個格子周圍有多少地雷*/
for(i=0;i<10;i++)
for(j=0;j<10;j++)
Mine[i][j].roundnum=MineStatistics(i,j);/*統計每個格子周圍有多少地雷*/
while(!kbhit())
{
if(LeftPress())/*滑鼠左鍵盤按下*/
{
MouseGetXY();
if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)/*重新來*/
{
MouseOff();
gameAGAIN=1;
break;
}
if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*當前滑鼠位置在格子范圍內*/
{
j=(MouseX-190)/20;/*x坐標*/
i=(MouseY-90)/20;/*y坐標*/
if(Mine[i][j].flag==1)/*如果格子有紅旗則左鍵無效*/
continue;
if(Mine[i][j].num!=0)/*如果格子沒有處理過*/
{
if(Mine[i][j].num==1)/*滑鼠按下的格子是地雷*/
{
MouseOff();
GameOver();/*游戲失敗*/
break;
}
else/*滑鼠按下的格子不是地雷*/
{
MouseOff();
Num=MineStatistics(i,j);
if(Num==0)/*周圍沒地雷就用遞歸演算法來顯示空白格子*/
ShowWhite(i,j);
else/*按下格子周圍有地雷*/
{
sprintf(randmineNUM,"%d",Num);/*輸出當前格子周圍的雷數*/
setcolor(RED);
outtextxy(195+j*20,95+i*20,randmineNUM);
mineNUM--;
}
MouseOn();
Mine[i][j].num=0;/*點過的格子周圍雷數的數字變為0表示這個格子已經用過*/
if(mineNUM<1)/*勝利了*/
{
GameWin();
break;
}
}
}
}
}
if(RightPress())/*滑鼠右鍵鍵盤按下*/
{
MouseGetXY();
if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*當前滑鼠位置在格子范圍內*/
{
j=(MouseX-190)/20;/*x坐標*/
i=(MouseY-90)/20;/*y坐標*/
MouseOff();
if(Mine[i][j].flag==0&&Mine[i][j].num!=0)/*本來沒紅旗現在顯示紅旗*/
{
DrawRedflag(i,j);
Mine[i][j].flag=1;
}
else
if(Mine[i][j].flag==1)/*有紅旗標志再按右鍵就紅旗消失*/
{
DrawEmpty(i,j,0,8);
Mine[i][j].flag=0;
}
}
MouseOn();
sleep(1);
}
}
}

⑦ 猜數游戲的C語言編譯代碼

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
time_t t;
int a[4];
char q[5]="1234";
void youxizuorenjieshao()
{
void zhuye();
system("cls");
printf("\n\n\n");
printf(" 游戲製作人介紹\n");
printf(" 姓名 :蔡硯剛\n");
printf(" 年齡 :18\n");
printf(" 性別 :男\n");
printf(" 出生年月(陽歷):1989年12月4日\n");
printf(" 出生年月(陰歷):1989年十一月初七\n");
printf(" 學校 :浙江工商大學\n");
printf(" 畢業學校 :安丘八中\n");
printf(" 出生地 :山東濰坊安丘\n");
printf(" 班級 :軟體0701\n");
printf(" 院系 :計算機與信息工程學院\n");
printf(" 寢室 :錢江灣生活區41#518\n");
printf(" 電話 :15858263646\n");
printf(" 這就是對菜鳥的介紹:你想評價一下他的游戲么?\n");
printf(" 返回主菜單按任意鍵:");
getchar();getchar();
zhuye();

}
void youxiguize()
{
void zhuye();
system("cls");
printf("\n\n\n\n");
printf(" 游戲介紹:\n");
printf(" 1輸入一個各位上數字互不相等的四位數\n");
printf(" 2如果你輸入的數字中有n個相同的數字返回nA\n");
printf(" 3如果你輸入的數字中有m個相同且位置相同返回mB\n");
printf(" 4當返回值是4A4B時即為猜中數字\n");
printf(" 5還可以提前偷窺數字但要輸入密碼\n");
printf(" 現在你已知道游戲規則,那麼趕快玩魅力小菜猜數字游戲吧!\n");
printf(" 按任意鍵返回主采單:");
getchar();getchar();
zhuye();
}
void suijishu()
{
a[0]=rand() %10;
while(1){
a[1]=rand()%10;
if(a[1]!=a[0]) break;
}
while(1){
a[2]=rand()%10;
if((a[2]!=a[0])&&(a[2]!=a[1])) break;
}
while(2){
a[3]=rand()%10;
if((a[3]!=a[0])&&(a[3]!=a[1])&&(a[3]!=a[2])) break;
}
}
void xiaofanhui()
{
int n;
void panan();
void youxi();
void zhuye();
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf(" 現在你已經成功完成游戲\n");
printf(" 按1繼續游戲\n");
printf(" 按2返回主菜單\n");
printf(" 按3返回上一級\n");
printf(" 請選擇:");
scanf("%d",&n);
switch(n){
case 1:suijishu();printf(" 請輸入所猜數字:");
panan();break;
case 2:zhuye();break;
case 3:youxi();break;
default:system("cls");printf(" 這個功能碼不正確\n");break;
}
}
void panan()
{
long n;
int i,j,k,l;
char b[5];
j=0;l=0;
scanf("%s",b);
for(i=0;i<4;i++)
b[i]=b[i]-'0';
for(i=0;i<4;i++) {
if(a[i]==b[i]) j++;
for(k=0;k<4;k++)
if(a[i]==b[k]){ l++;break;}
}
if((j==4)&&(l==4)){
printf(" 4A4B\n");
printf(" 恭喜你,乾的不錯,想記入排行榜么?");
for(n=1;n<=300000000;n++);
xiaofanhui();
}
else{
printf(" %dA%dB",l,j);
printf("請輸入所猜數字:");
panan();
}
}
void print()
{
printf("\n\n\n\n\n\n\n");
printf(" 魅力小菜猜數字游戲現在開始\n");
printf(" 你做好准備了么?\n");
printf(" 如果你用最少的次數猜中的話,還有望進入小菜排行榜呢\n");
printf(" 請輸入所猜數字:");panan();
}
void mima()
{
int i,j;
char p[5];
void youxi();
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf(" 你可真偷懶!偷懶需要密碼吆!你知道密碼么?\n");
printf(" 請輸入密碼:");
for(i=1;i<3;i++){
scanf("%s",p);
if(strcmp(p,q)==0){ system("cls"); printf("偷窺答案是:%d%d%d%d\n",a[0],a[1],a[2],a[3]);print();}
else{ printf(" 密碼錯誤\n");
printf(" 請輸入密碼:");
}
}
scanf("%s",p);
if(strcmp(p,q)==0){ system("cls"); printf("偷窺答案是:%d%d%d%d\n",a[0],a[1],a[2],a[3]);print();}
else printf(" 密碼錯誤\n");
printf(" 你已輸入3次密碼還錯誤,看來偷雞不成蝕把米\n");
printf(" 還是本分點玩游戲吧:");
for(j=1;j<=500000000;j++);
youxi();
}
void youxi()
{
int m;
system("cls");
suijishu();
printf("\n\n\n\n\n\n\n\n");
printf(" 魅力無限的猜數字游戲現在開始:\n");
printf(" 按1現在開始游戲\n");
printf(" 按2提前偷窺(需要4位密碼吆)\n");
printf(" 請輸入:");
scanf("%d",&m);
switch(m){
case 1:system("cls");print();panan();break;
case 2:mima();break;
}
}
void paihang()
{
char ch;
FILE *fp;
void zhuye();

if((fp=fopen("paihangbang.txt","r"))==NULL){
printf("無信息\n");
}
while(!feof(fp)){
ch=fgetc(fp);
putchar(ch);
}
if(fclose(fp)){
printf("不能關閉文件\n");
}
printf("\n看到了吧,你想成為其中一員嗎?趕快來玩吧!小菜給你無限驚喜!返回主菜單請按任意鍵");
getchar();getchar();
zhuye();
}
void zhuyexuanze()
{
int n;
long i;
void zhuye();
scanf("%d",&n);
switch(n){
case 1:youxi();break;
case 2:system("cls"); paihang();break;
case 3:youxiguize();break;
case 4:youxizuorenjieshao();break;
case 5:break;
default:printf(" 您輸入的功能碼有誤,請重新輸入:\n");
for(i=1;i<=300000000;i++);
system("cls"); zhuye();
}
}
void zhuye()
{
system("cls");
printf("$$$$$$$哈!哈!累了吧,無聊了吧!玩一下小菜猜數字游戲八!¥¥¥¥¥¥¥¥\n");
printf(" 製作人:蔡硯剛");
printf("\n\n\n");
printf(" 小菜猜數字\n\n\n");
printf(" 下面玩一下吧!\n");
printf(" 按下以下數字選擇你所要的功能:\n");
printf(" 1開始游戲\n");
printf(" 2查看排行榜\n");
printf(" 3游戲規則介紹\n");
printf(" 4製作人介紹\n");
printf(" 5退出遊戲\n\n\n\n\n");
printf(" 請輸入你所要選擇的功能:");
zhuyexuanze();
}
main()
{
srand((unsigned) time(&t));
zhuye();

⑧ 跪求能在c++6.0編譯的貪食蛇、俄羅斯方塊等游戲的C++源代碼!!!

/******************************************************************
貪食蛇 Preview
此版本貪吃蛇用蛇的方塊是集合用的是數組
蛇移動是以Sleep()阻斷進程實現的
故蛇移動看似較為卡頓,且數組插入數據效率較低,
故操作體驗十分一般
*******************************************************************/
#include<windows.h>
#include <time.h>

#pragma comment(lib,"winmm.lib")

#define LENGTH 40 //游戲場地的寬
#define WIDTH 10 //組成蛇的的正方形的邊長
#define RANGE 50 //游戲場地與客戶去之間間隔
#define SNAKE_COLOR RGB(255,0,0) //蛇的顏色
#define BK_COLOR RGB(204,232,207) //窗體背景色
#define NO_SNAKE 0
#define HAS_SNAKE 1
#define STEP 2
#define MAKECOOR(x) (x)*WIDTH //把flags數組的下標映射為坐標

typedef struct
{
int x;
int y;
int flag;
} GRID;//蛇的結構

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
void MakePartSnake(int,int,int,GRID *); //為蛇身增加或設置一個方塊
void MoveSnake(HWND); //移動蛇
void MakeFood(GRID *food); //製造隨機方塊
void initializer(); //初始化游戲
void Manager();

TCHAR szAppName[] = TEXT("Gluttony Snake");
int flags[LENGTH][LENGTH]; //游戲區域所有方塊的狀態標記
RECT playground; //游戲場地
GRID *snake = NULL; //蛇所在位置數組
GRID *food = NULL; //食物對象
static int MAX_LENGTH = 0;//默認蛇分配的最大長度(可變的)
int snake_len = 0;
int direct = 0;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
MSG msg;
HWND hwnd;
WNDCLASS wndclass;
while(TRUE)
{
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground=CreateSolidBrush(RGB(203,202,201));
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.style = CS_VREDRAW | CS_HREDRAW;

if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("Register class failed!! Retry??"),szAppName,0);
return 0;
}
break;
}
hwnd = CreateWindow(szAppName,
TEXT("Gluttony Snake Preview V1.0.1"),
WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^ WS_MINIMIZEBOX ^ WS_MAXIMIZEBOX,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,NULL,
hInstance,
NULL);

ShowWindow(hwnd,SW_NORMAL);
UpdateWindow(hwnd);
while(TRUE)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
MoveSnake(hwnd);
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HBRUSH hBrush;
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;

case WM_CREATE:
//PlaySound(TEXT("HG.wav"),NULL ,SND_ASYNC | SND_LOOP);//播放游戲音樂;
initializer();
MoveWindow(hwnd,RANGE * 2,RANGE * 2,WIDTH * LENGTH + RANGE * 3,WIDTH * LENGTH + RANGE * 3,TRUE);
return 0;
case WM_KEYDOWN:
switch(wParam)
{
case VK_LEFT:
if(direct != VK_RIGHT)
direct = VK_LEFT;
break;
case VK_RIGHT:
if(direct != VK_LEFT)
direct = VK_RIGHT;
break;
case VK_UP:
if(direct != VK_DOWN)
direct = VK_UP;
break;
case VK_DOWN:
if(direct != VK_UP)
direct = VK_DOWN;
break;
default:
break;
}
return 0;

case WM_PAINT:
for(int i = 0; i != snake_len; ++i)
{
flags[(snake + i)->x][(snake + i)->y] = (snake + i)->flag;
}
hdc = BeginPaint(hwnd,&ps);
SetViewportOrgEx(hdc,RANGE/2,RANGE,NULL);
hBrush = CreateSolidBrush(BK_COLOR);
SelectObject(hdc,hBrush);
Rectangle(hdc,playground.left,playground.top,playground.right,playground.bottom);
DeleteObject(hBrush);
hBrush = CreateSolidBrush(SNAKE_COLOR);
SelectObject(hdc,hBrush);
for(int i = 0; i != LENGTH;++i)
{
for(int j = 0; j != LENGTH;++j)
{
if(flags[i][j] == HAS_SNAKE)
{
Rectangle(hdc,MAKECOOR(i),MAKECOOR(j),MAKECOOR(i+1),MAKECOOR(j+1));
}
}
}
DeleteObject(hBrush);
EndPaint(hwnd,&ps);
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
//////////////////////////初始化游戲各個參數////////////////////////////////////////////////////////////
void initializer()
{
if(snake != NULL)
free(snake);
if(food != NULL)
free(food);
snake_len = 3; //蛇的初始長度為3
direct = VK_RIGHT; //蛇的初始方向為向右
MAX_LENGTH = 100; //蛇默認最初分配最大長度為20
food = (GRID *)calloc(1,sizeof(GRID));//分配儲存food的內存
snake = (GRID *)calloc(MAX_LENGTH,sizeof(GRID));//分配儲存蛇的內存
/*************初始化游戲場地*******************/
playground.left = 0;
playground.top = 0;
playground.right = WIDTH * LENGTH;
playground.bottom = WIDTH * LENGTH;
/**************初始化游戲場地********************/

for(int i = 0 ;i < LENGTH;++i)
{
for(int j = 0; j < LENGTH;++j)
{
flags[i][j] = NO_SNAKE;
}
}
for(int i = 0; i != snake_len;++i)
{
MakePartSnake(LENGTH / 2 + 2 - i,LENGTH / 2,HAS_SNAKE,(snake + i));
}///初始化蛇
MakeFood(food);///產生food
}

void MakePartSnake(int x,int y,int flag,GRID * snake)
{
snake->x = x;
snake->y = y;
snake->flag = flag;
}
////////////////////////////////////////////////////////////////////////////////

//////////////////控制蛇的移動///////////////////////
void MoveSnake(HWND hwnd)
{
Manager();
flags[(snake + snake_len - 1)->x][(snake + snake_len - 1)->y] = NO_SNAKE;//把蛇的尾部去除(表現為蛇移動一格)

for(int i = snake_len - 1; i > 0;--i)
{
(snake+i)->x = (snake + i -1)->x;
(snake+i)->y = (snake + i -1)->y;
}
if(direct == VK_LEFT)
{
snake->x -= 1;
}
if(direct == VK_RIGHT)
{
snake->x += 1;
}
if(direct == VK_UP)
{
snake->y -= 1;
}
if(direct == VK_DOWN)
{
snake->y += 1;
}
InvalidateRect(hwnd,NULL,FALSE);
Sleep(200);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////通過隨機生成food
void MakeFood(GRID *food)
{
srand((unsigned) time(NULL));
food->x = rand() % LENGTH;
food->y = rand() % LENGTH;
food->flag = HAS_SNAKE;
flags[food->x][food->y] = food->flag;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////游戲規則的映射及內存的處理///////////////////////////////////////////////////
void Manager()
{
if(snake_len >= MAX_LENGTH - 2)
{
MAX_LENGTH += STEP;
snake = (GRID *)realloc(snake,MAX_LENGTH * sizeof(GRID));
}//若蛇的長度數組snake將超過所分配的內存就再次擴充分配

if(snake->x < 0 || snake->x >= LENGTH || snake->y < 0 || snake->y >= LENGTH)
{
MessageBox(NULL,TEXT("Game Over!!"),szAppName,0);
initializer();
return;
}///判斷蛇是否碰到邊界

for(int i = 4;i < snake_len;++i)
{
if(snake->x == (snake + i)->x && snake->y == (snake + i)->y)
{
MessageBox(NULL,TEXT("Game Over!!"),szAppName,0);
initializer();
return;
}
}////判斷蛇是否碰到自身

if(food->x == snake->x && food->y == snake->y)
{
MakePartSnake(
(snake + snake_len - 1)->x
,(snake + snake_len - 1)->y
,HAS_SNAKE
,snake + snake_len
);
++snake_len;
MakeFood(food);
}///判斷蛇是否吃到food
}
////////////////////////////////////////////////////////////////////////////////

⑨ 有游戲源碼文件,怎麼把它變成可以玩的游戲

游戲源碼是完整的么,什麼語言寫的,相應的搭建環境即可,要編譯的得編譯,是app版,還是h5,不會的話可以幫代搭建

⑩ java游戲源代碼可以在電腦上編譯嗎用什麼軟體怎麼編譯

沒有編譯說明的話,還是比較難編譯的

熱點內容
安卓上哪裡下大型游戲 發布:2024-12-23 15:10:58 瀏覽:189
明日之後目前適用於什麼配置 發布:2024-12-23 14:56:09 瀏覽:56
php全形半形 發布:2024-12-23 14:55:17 瀏覽:829
手機上傳助手 發布:2024-12-23 14:55:14 瀏覽:733
什麼樣的主機配置吃雞開全效 發布:2024-12-23 14:55:13 瀏覽:831
安卓我的世界114版本有什麼 發布:2024-12-23 14:42:17 瀏覽:711
vbox源碼 發布:2024-12-23 14:41:32 瀏覽:279
詩經是怎麼存儲 發布:2024-12-23 14:41:29 瀏覽:661
屏蔽視頻廣告腳本 發布:2024-12-23 14:41:24 瀏覽:420
php解析pdf 發布:2024-12-23 14:40:01 瀏覽:821