導航:首頁 > 源碼編譯 > 游戲源碼都有哪些組成

游戲源碼都有哪些組成

發布時間:2025-03-06 15:00:42

1. 誰有java游戲源碼,給我發過來『

注意:源代碼僅供個人作學習研究時的參考,不得在程序製作中直接抄錄。
源代碼一共兩個文件:Mine.java,MGame.java,另外還有一些圖片。
在JBuilder下建立一個新的工程,將兩個源文件復制到工程目錄下的src\mine目錄中,將所有圖片復制到src\images目錄中就可以了。

要點分析

數據結構
首先要說明一下用來存放地雷信息的數組grid。
grid是一個二維數組,第一位對應表格的行,第二位對應表格的列,比如grid[y][x]表示第y行第x列。每個位元組的含義分三段:0-9表示已經挖開;10-19表示仍然埋藏;20-29表示做了標記。每段中:0-8表示周圍的地雷數量;9表示是地雷。
newGame()函數
這是用於開始一個新游戲的。
由於每次地雷的埋放地是隨機的,應次開始新游戲之前先要生成新的地雷信息。
第一步是初始化grid,將所有內容都置成10,因為一開始所有格子都是埋藏的。
for(i=0;i<Height; i++)
{
for(j=0; j<Width; j++)
grid[j] = 10;
}
第二步是隨機產生地雷。當然了,已經產生過地雷的地方要避開。
for(i=0; i<MINECOUNT; i++)
{
while(true)
{
x = Math.abs(rand.nextInt()) % Width;
y = Math.abs(rand.nextInt()) % Height;
if (grid[y][x] != 19)
{
grid[y][x] = 19;
break;
}
}
}
最後就是無雷處計算周圍的雷數了。怎麼計算?一個一個加就是了。
挖雷與做標記
在看一下按鍵響應函數keyPressed(int kcode),按1鍵是挖開動作。
前半部分表示如果當前焦點在一個埋藏格(值介於10到19之間),那麼將其值減10,表示現在挖開。當然如果地下不是雷而且周圍沒有雷(值等於0)那麼需要自動展開,這里調用了Expand(),(selx,sely)是當前焦點的表格坐標。
後半部分表示如果當前焦點在一個已經挖開的格子上(值小於10),那麼就調用SafeExp()來自動挖開周圍未挖的格子。
按3鍵是做標記動作。如果當前格是埋藏格,就做上標記(值加10);如果當前格已經做了標記,那麼就去掉標記(值減10)。
自動展開
Expand()是一個嵌套函數,他的作用是將周圍不含地雷的格子周圍全部挖開,如果挖開的部分中也有周圍不含地雷的格子,那麼對那些格子也重復前面的操作,直到把相關的格子都挖開。挖的順序是左上、上、右上、左、右、左下、下、右下,如果遇到一個周圍不含地雷的格子(值為0)那麼馬上嵌套調用Expand()對那個格子進行處理。
SafeExp()是一個自動挖開周圍未挖格子的函數。當然要實現這個功能是有條件的,就是周圍做了標記的格子數量必須等於當前格所標的數字,也就是說玩家把周圍所有的地雷都標記了(不管是否標錯)。函數中第一個部分就是做以上條件的判斷。
第二部分是把周圍埋藏的格子挖開。但是由於玩家的錯誤可能標記了沒有地雷的格子,而把有地雷的格子漏標了,所以先要檢查一下沒做標而有地雷的格子和做錯標記的格子。如果沒有這些錯誤,那麼可以安全的翻開了,同時也要檢查是否挖到周圍不含雷的格子,有的話就要調用Expand()了。
SafeExp()的返回值表示是否引爆了地雷,就是標記錯誤,true表示是,false表示否。這主要用於判斷這次游戲是否要結束。

類介紹
圖像緩存 ExtendedImage
ExtendedImage是Siemens自己擴展的一個專用類,只在Siemens的Java中存在。
這個類主要是用做圖像的緩存。大家不知道還有沒有印象,以前在PC上編程的時候由於顯示的速度比較慢,往往會開一片顯示緩存,先把要現實的內容畫到這片緩存中,全部畫好後再一次性顯示出來,ExtendedImage類就起到了這個作用。其實Java本身的Image類也可以實現類似的功能,但是顯示速度好象不如人意,而且ExtendedImage更好用,所以我基本上都採用這個類。當然這對通用性是不利的。
ExtendImage的主要函數有:
void clear(byte color);
用給定的顏色填充整個圖形區域。
void blitToScreen(int x, int y);
將緩存內容貼到顯示屏上,(x,y)是屏幕左上角坐標。
Image getImage();
返回一個標準的Image類。可以通過ExtendImage.getImage().getGraphics()得到與其相關的Graphics對象,用來往ExtendImage上面畫圖。

2. C語言源代碼是什麼

數字版「拼圖」游戲C源代碼:

#include<time.h>

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<windows.h>

int i, j, r, k; //i、j、r用於循環, k存放隨機數值


int m, n; // m、n是當前空位的下標, t標記排序是否成功

int a[4][4]; //存儲4×4共16個數字的數組

void show(void); //輸出數組表格

void csh(void); //初始化界面

int yes(void); //判斷排序是否成功

void up(void); //數字向上移動到空位(空位則下移)

void down(void); //數字向下移

void left(void); //數字向左移

void rght(void); //數字向右移

void inkey(void); //按鍵操作

void gtxy(int x, int y) ; //控制游標移動的函數

int main(void)

{ while(1)

{csh( );

while(1)

{ inkey();

show();

if ( yes( ) )

{gtxy(6,12); printf("你成功了! 再來一局y/n?"); break;}

}

if(getch( )== ʹnʹ)break;

}

return 0;

}

void csh(void)

{r=0;

CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下兩行是隱藏游標的設置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

for(i=0;i<4;i++) //給數組a依序賦值

for(j=0;j<4;j++)
{ if (i==3 && j==3) a[i][j]=0;
else a[i][j]=1+r++;
}

a[3][3]=a[1][1]; a[1][1]=0; //把a[3][3]與a[1][1]的值交換一下

m=1; n=1;

srand((unsigned)time(0)); //初始化隨機數發生器

for(r=0;r<500;r++) //將數組各值打亂
{k=rand( )%(4); //取0-3隨機數,分別代表上下左右四個方向
switch(k)
{ case 0: { up( );break; }
case 1: {down( );break; }
case 2: {left( );break; }
case 3: {rght( ); break; }
}
}

printf(" 數字拼圖");

printf(" ┌──────┬──────┬──────┬──────┐");

printf(" │ │ │ │ │");

printf(" ├──────┼──────┼──────┼──────┤");

printf(" │ │ │ │ │");

printf(" ├──────┼──────┼──────┼──────┤");

printf(" │ │ │ │ │");

printf(" ├──────┼──────┼──────┼──────┤");

printf(" │ │ │ │ │");

printf(" └──────┴──────┴──────┴──────┘");
show( );
}

void show(void)

{for(i=0;i<4;i++)

for(j=0;j<4;j++) //gtxy(7*j+9, 2*i+4)是游標到指定位置輸出數字

{gtxy(7*j+9,2*i+4); if(a[i][j]==0)printf(" │");

else if(a[i][j]>9)printf(" %d │",a[i][j]);

else printf(" %d │",a[i][j]);

}

}

void inkey(void)

{ int key;

key=getch( );
switch(key)
{ case 72: { up( ); break;}
case 80: {down( ); break; }
case 75: {left( ); break; }
case 77: {rght( );break;}
}
}

void up(void)

{ if (m!=3) //移動時要考慮空位"0"是否已經在邊界
{ a[m][n]=a[m+1][n]; m++; a[m][n]=0; }
}


void down(void)

{ if (m!=0)
{a[m][n]=a[m-1][n]; m--; a[m][n]=0; }
}

void left(void)

{ if (n!=3)
{ a[m][n]=a[m][n+1]; n++; a[m][n]=0;}
}
void rght(void)

{ if (n!=0)
{ a[m][n]=a[m][n-1]; n--; a[m][n]=0; }
}

int yes(void)

{ r=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{ if (a[i][j]!=1+r++) return (r==16)?1:0; }
}

void gtxy(int x, int y) //控制游標移動的函數

{ COORD coord;

coord.X = x;

coord.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

閱讀全文

與游戲源碼都有哪些組成相關的資料

熱點內容
怎麼做程序員男友 瀏覽:826
信道編解碼作用 瀏覽:838
程序員零基礎學習 瀏覽:201
網卡加密視頻 瀏覽:628
命令按鈕的代碼 瀏覽:853
androidjson編碼 瀏覽:500
筆記本rpc伺服器不可用怎麼進入桌面 瀏覽:946
哪個app開發好 瀏覽:266
java封裝與調用方法 瀏覽:288
自學編程找不到工作 瀏覽:356
招行app余額在哪裡 瀏覽:832
編譯target 瀏覽:910
java圖片縮略圖 瀏覽:883
初中學生編程的最後境界 瀏覽:493
鴻蒙方舟編譯器安卓是什麼 瀏覽:239
手機加密中斷數據 瀏覽:505
學校機房伺服器長什麼樣子 瀏覽:248
csharp的編譯器是啥 瀏覽:486
linux電腦如何連接伺服器地址 瀏覽:955
阿里域名郵箱pop伺服器地址 瀏覽:852