Teya Salat

MXH AVATAR[iOS, ANDROI, JAVA]
IWIN ONLINE 2013[iOS, ANDROI, JAVA]
NAM QUỐC SƠN HÀ - KHÍ PHÁCH ANH HÙNG[iOS, ANDROI, JAVA]
MOBIARMY- SO TÀI SÚNG NHỰA[iOS, ANDROI, JAVA]
MUSIC CITY-NHẢY AUDITION[iOS, ANDROI, JAVA]
Tự tạo 1 game xe tăng với j2me









====
AI tự động giải quyết vấn đề.


thật ra không có gì thông minh cho lắm, người lập trình nghĩ sao viết vậy thì các nhân vật tự động cũng làm theo như vậy. nhưng cũng có những Artificial inteligence thật sự làm người ta ngạc nhiên, điều đó phụ thuộc vào người lập trình như thế nào, có khi họ không phải là người truyền cách thức hoạt động vào code mà là một người khác có trí tuệ cao hơn họ, người này có thể không biết gì về lập trình cả.


Ở đây tôi chỉ làm cho xe của địch có khả năng tự di chuyển và nả đạn khi cần thiết, như vậy thì mới thật sự là một trò chơi. trong game.java tôi thêm một hàm mới, hàm này tổng hợp một mã phím theo thời gian.




//game.java



import javax.microedition.lcdui.*;

import java.util.*;



public class game extends Canvas {

String["> smenu={"play game","help","about"};

int w,h,fh,mindex=0,mode=0,k,ak;

Midlet m;

Font f=Font.getDefaultFont();

T t,x;

long lai=0;



public game(Midlet m){

this.m=m;

setFullScreenMode(true);

w=getWidth();

h=getHeight();

fh=f.getHeight();

t=new T(0,0,0xf0f0f0);

x=new T-192;}



public void paint(Graphics g){

g.setColor(0);

g.fillRect(0, 0, w, h);

g.setColor(0xf0f0f0);

switch(mode){

case 0: //vẽ menu

//vẽ thanh index



g.fillRect0/2+mindex*fh, w, fh);

//vẽ các menu

for0{

if(i==mindex){g.setColor(0);}else{g.setColor(0xf0f0f0);}

g.drawString0/2+i*fh, Graphics.HCENTER|Graphics.TOP);

}

break;

case 1: //vẽ game play

g.drawString0;

t.paint(g, k);

x.paint(g,
(ak=ai(x,ak))

);

if(check(t,x)){x.color-=0x000010;}

if(check(x,t))t.color-=0x100000;

break;

case 2: //vẽ help

g.drawString0;

break;

case 3: //vẽ about

g.drawString0;

break;}

//vẽ nút lệnh

g.setColor(0xf0f0f0);

g.drawString("exit", 0, h, Graphics.LEFT|Graphics.BOTTOM);

g.drawString("back", w, h, Graphics.RIGHT|Graphics.BOTTOM);

repaint();}



protected void keyReleased(int k){this.k=0;}



public void keyPressed(int k){

this.k=k;

//cho di chuyển vị trí thanh menu

if(mode==0){

if-1mindex--;

if-2mindex++;

if(mindex<0)mindex=smenu.length-1;

if(mindex==smenu.length)mindex=0;

//thay đổi mode khi lựa chọn menu

if-5mode=mindex+1;

//các lệnh cho menu góc màn hình

if-6m.notifyDestroyed();}

if-7mode=0;}



boolean check(T a, T b){

int xc=0/16/3;

int yc=0/16/3;

if-1{return true;}

return false;}





//đây là hàm tổng hợp theo thời gian mã key cho xe tự động



int ai(T a,int ak){

Random rd=new Random();

// điều kiệm để đổi hướng xe là sau 2 giây (2000millis giây)

if(lai<System.currentTimeMillis()-2000){

lai=System.currentTimeMillis();

int k=Math.abs(rd.nextInt())%4;

return -1;}



//nếu như không có gì thay đổi thì cứ sau 25 millis giây cho tiến về trước 1 bước

if(System.currentTimeMillis()%25==0)

return -1;



//nếu không thì trả về key không, tức không di chuyển

return 0;}



}









. Kết quả của ta sẽ là xe tự động di chuyển









Và sửa lại một chút cho khả năng tự nhả đạn:




int ai(T a,int ak){

Random rd=new Random();



if(lai<System.currentTimeMillis()-2000){

lai=System.currentTimeMillis();

int k=Math.abs(rd.nextInt())%4;

return -1;}

if(System.currentTimeMillis()%25==0)

return -1;


if(rd.nextInt()%3==0&amp;&amp;a.d.f==-1){return -5;}



return 0;}



====
====
giới hạn màn hình


tức nhiên nếu cứ để cho những chiếc xe chạy ra khỏi giới hạn của màn hình thì chẳng biết nó sẽ đi tới đâu, thật sự thì nó không thể nào đi quá giới hạn của biến int nhưng mà ta cũng có thể coi là đó là một nơi vô tận. bây giờ ta sẽ giới hạn khả năng di chuyển của chúng, nhưng chiếc xe khi gặp khung màn hình thì không di chuyển thêm nữa. ta biến đổi T.java như sau:





//T.java



import javax.microedition.lcdui.*;



public class T {

F d;

int x,y,f,color,w,h;

long lm=0;

byte[">["> shape={{0,1,0,1,1,1,1,0,1},{1,0,1,1,1,1,0,1,0},{0,1,1,1,1,0,0,1,1},{1,1,0,0,1,1,1,1,0}};



public T(int x,int y,int color,
int w, int h

){

this.x=x;

this.y=y;

this.color=color;

d=new F32;


this.w=w;

this.h=h;

}



boolean check(){return (lm<System.currentTimeMillis()-60);}



public void paint(Graphics g,int k){

switch(k){

case -1: f=0; if(check()){y-=16;
if(y<0)y=0;

lm=System.currentTimeMillis();} break;

case -2: f=1; if(check()){y+=16;
if-48y=h-16*3;

lm=System.currentTimeMillis();} break;

case -3: f=2; if(check()){x-=16;
if(x<0)x=0;

lm=System.currentTimeMillis();} break;

case -4: f=3; if(check()){x+=16;
if-48 x=w-16*3;

lm=System.currentTimeMillis();}break;

case -5: d.f=this.f; break;}

g.setColor(color);

for0{

int c=i%3,r=0/3;

g.fillRect0;}

d.fire32;

}

}





. Do hàm khởi tạo trong T.java đã thay đổi nên trong game.java ta cũng thay đổi khởi tạo cho biến
t


x







public game(Midlet m){


this.m=m;


setFullScreenMode(true);


w=getWidth();


h=getHeight();


fh=f.getHeight();


t=new T(0,0,0xf0f0f0,
w,h

);


x=new T(w-16*3,h-16*3,0x6060f0,
w,h

);}





* Kết quả rất mãn nguyện:











====
một đội quân địch, cấp độ khó


trong trò chơi mà chơi với những AI thì lúc nào chúng cũng thua mình thôi, do đó cần tạo ra độ khó bằng cách tăng số lượng của chúng. tôi sẽ tạo ra một đạo quân địch từ những gì mà ta đã có và thêm vào đó một vài thứ khác.


ta sẽ tạo ra một class E, bao gồm một biến xe T và những giá trị như mã key, biến đúng sai die , như sau:...
«1234»
Từ khóa: Tự, tạo, 1, game, xe, tăng, với, j2me
Lên trên Có thể bạn quan tâm
Chia sẻ:facebookYahoo Zing TwitterGoogle[sms]G+GO
BB Code:
Link:
7