Hi, Khách!
|
trò chơi chó cắn
Cờ chó cắn chắc là cờ đơn giản nhất mà tôi từng chơi khi còn nhỏ và ở bất cứ đâu cũng có thể chơi được. nó còn đơn giản hơn là tic tac toe nữa đấy, và hôm nay tôi sẽ hướng dẫn viết một bàn cờ chó cắn đơn giản. đầu tiên là quân cờ chó cắn, gồm có các thông tin sau:
C:\Users\thanhliem\Documents\NetBeansProjects\Tree\src\tree.java
<?php
public class tree {
//vị trí hiện tại của quân cờ và màu của quân cờ
int position,color;
//hàm khởi tạo nhận giá trị vị trí và màu quân cờ
public tree(int pos,int color){
this.position=pos;
this.color=color;}
}
?>
Copy code
public class tree {
//vị trí hiện tại của quân cờ và màu của quân cờ
int position,color;
//hàm khởi tạo nhận giá trị vị trí và màu quân cờ
public tree(int pos,int color){
this.position=pos;
this.color=color;}
}
?>
Copy code
Còn đây là file banco.java dùng để tiến hành các lệnh vẽ theo game, điều kiện trò chơi, cách chơi….
C:\Users\thanhliem\Documents\NetBeansProjects\Tree\src\banco.java
<?php
import javax.microedition.lcdui.*;
import java.util.*;
public class banco extends Canvas {
Midlet m;
//biến các điểm tọa độ của bàn cờ
int[[ moc;
//biến các điểm có thể di chuyển trên bàn cờ
boolean[ free=new boolean[5;
int w,h,dx,dy,k;
boolean mot=true,finish=false,win=false;
//biến các quân cờ, vị trí của ta là 0, 2 của máy là 1, 3
tree[ quan;
//biến rd này dùng để chọn ngẫu nhiên nhân vật tự động
Random rd=new Random();
public banco(Midlet m){
setFullScreenMode(true);
w=getWidth(); h=getHeight();
//điểm vẽ bàn cờ
dx=(w-128)/2;
dy=(h-128)/2;
//tạo các tọa độ vẽ bàn cờ, 128x128
moc=new int[5[2;
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
moc[i*2+j[0=i*128;
moc[i*2+j[1=j*128;}}
moc[4[0=64;
moc[4[1=64;
//tạo các quân cờ ban đầu, của ta là số chẵn 0, 2
quan=new tree[4;
for(int i=0;i<quan.length;i++){
//các điểm đặt quân không còn trống, không thể di chuyển vào
free[i=false;
//đặt màu cho các quân cờ, quân ta màu xanh lá 0, 2 chia hết cho 2
quan[i=new tree(i,i%2==0?0x00f000:0x0000f0);}
//điểm còn lại chưa đặt quân cờ trống là ở giữa bàn cờ vị trí 4
free[4=true;
this.m=m;}
public void paint(Graphics g){
g.setColor(0);
g.fillRect(0,0,w,h);
//vẽ bàn cờ
vebanco(g);
//vẽ quân cờ
vequanco(g);
g.setColor(0xf000f0);
//nếu kết thúc thì vẽ kết quả
if(finish)
g.drawString(win?"you win!":"you lose!",w/2,h,Graphics.BOTTOM|Graphics.HCENTER);
//vẽ hướng dẫn chơi game
g.drawString("nhấn 5 để di chuyển.",w/2,0,Graphics.TOP|Graphics.HCENTER);
g.drawString("nhấn * để thay đổi đối tượng",w/2,0+g.getFont().getHeight(),Graphics.TOP|Graphics.HCENTER);
repaint();
}
protected void keyPressed(int k){
//nếu mot==true thì ta điều khiển quân 0, sai ta điều khiển quân 2
//tìm ra vị trí trống có thể đi tiếp
int focus=mot?0:2,move=free();
//nếu chưa xong game thì cho di chuyển
if(!finish)
//nếu như bấm phím 5 thì cho di chuyển
if(k==KEY_NUM5||k==-5)
//nếu di chuyển được thì cho auto di chuyển
if(move(focus,move)){
auto();}
//nếu không thì chuyển qua quân còn lại di chuyển, nếu được thì auto di chuyển
else if(move(focus==0?2:0,move)){
auto();
}
//ngược lại thì thua và kết thúc trò chơi
else{finish=true; win=false;}
//nhấn phím * để thay đổi đối tượng điều khiển
if(k==KEY_STAR)mot=!mot;}
//di chuyển nhân vật tự động
void auto(){
//tìm ra vị trí còn trống
int move=free();
//chọn ngẫu nhiên nhân vật tự động giữa 1 và 3
int focus=rd.nextInt()%2==0?1:3;
//cho di chuyển, nếu 1 không di chuyển thì chuyển qua 3 và ngược lại
if(move(focus,move)){}else{
//nếu cả 1 và 3 đều không còn di chuyển được nữa thì kết thúc trò chơi, người chơi thắng
if(!move(focus==1?3:1,move)){
finish=true;
win=true;}}}
//vẽ bàn cờ
void vebanco(Graphics g){
g.setColor(0xf0f000);
//vẽ 2 gạch chéo bàn cờ
g.drawLine(dx+moc[0[0,dy+moc[0[1,dx+moc[3[0,dy+moc[3[1);
g.drawLine(dx+moc[1[0, dy+moc[1[1,dx+moc[2[0, dy+moc[2[1);
//vẽ khung vuông bàn cờ
g.drawRect(dx, dy, 128, 128);
//vẽ nơi dành cho con chó, chữ "chó"
g.drawString("chó",dx+64,dy,Graphics.BASELINE|Graphics.HCENTER);
}
//vẽ các quân cờ
void vequanco(Graphics g){
//xác định đối tượng đang chọn, 0 hay là 2
int focus=mot?0:2;
for(int i=0;i<4;i++){
//tìm ra vị trí hiện tại của quân được chọn
int pos=quan[i.position;
//vẽ con trỏ chọn đối tượng
if(i==focus){
g.setColor(0xf00000);
g.fillArc(dx+moc[pos[0-9, dy+moc[pos[1-9, 18, 18, 0, 360);}
g.setColor(quan[i.color);
g.fillArc(dx+moc[pos[0-8, dy+moc[pos[1-8, 16, 16, 0, 360);
}
}
//kiểm tra xem có thể chuyển từ vị trí này tới vị trí trống được ko
boolean cango(int pos,int npos){
if(pos==1&&npos==2)return false;
if(pos==2&&npos==1)return false;
if(pos==0&&npos==3)return false;
if(pos==3&&npos==0)return false;
if(pos==0&&npos==2)return false;
if(pos==2&&npos==0)return false;
return true;}
//tìm ra vị trí còn trống
int free(){
//kiểm tra trong mảng free xem có vị trí nào trống thì trả lại
for(int i=0;i<5;i++){
if(free[i)return i;}
return 0;}
//cho di chuyển và nếu di chuyển được thì trả lại giá trị đúng sai
boolean move(int pos,int npos){
if(cango(quan[pos.position,npos)){
//đặt vị trí đang đứng thành trống
free[quan[pos.position=true;
//cho chuyển sang vị trí mới
quan[pos.position=npos;
//đặt vị trí mới không còn trống nữa
free[quan[pos.position=false;
return true;}
return false;}
}
?>
Copy code
import javax.microedition.lcdui.*;
import java.util.*;
public class banco extends Canvas {
Midlet m;
//biến các điểm tọa độ của bàn cờ
int[[ moc;
//biến các điểm có thể di chuyển trên bàn cờ
boolean[ free=new boolean[5;
int w,h,dx,dy,k;
boolean mot=true,finish=false,win=false;
//biến các quân cờ, vị trí của ta là 0, 2 của máy là 1, 3
tree[ quan;
//biến rd này dùng để chọn ngẫu nhiên nhân vật tự động
Random rd=new Random();
public banco(Midlet m){
setFullScreenMode(true);
w=getWidth(); h=getHeight();
//điểm vẽ bàn cờ
dx=(w-128)/2;
dy=(h-128)/2;
//tạo các tọa độ vẽ bàn cờ, 128x128
moc=new int[5[2;
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
moc[i*2+j[0=i*128;
moc[i*2+j[1=j*128;}}
moc[4[0=64;
moc[4[1=64;
//tạo các quân cờ ban đầu, của ta là số chẵn 0, 2
quan=new tree[4;
for(int i=0;i<quan.length;i++){
//các điểm đặt quân không còn trống, không thể di chuyển vào
free[i=false;
//đặt màu cho các quân cờ, quân ta màu xanh lá 0, 2 chia hết cho 2
quan[i=new tree(i,i%2==0?0x00f000:0x0000f0);}
//điểm còn lại chưa đặt quân cờ trống là ở giữa bàn cờ vị trí 4
free[4=true;
this.m=m;}
public void paint(Graphics g){
g.setColor(0);
g.fillRect(0,0,w,h);
//vẽ bàn cờ
vebanco(g);
//vẽ quân cờ
vequanco(g);
g.setColor(0xf000f0);
//nếu kết thúc thì vẽ kết quả
if(finish)
g.drawString(win?"you win!":"you lose!",w/2,h,Graphics.BOTTOM|Graphics.HCENTER);
//vẽ hướng dẫn chơi game
g.drawString("nhấn 5 để di chuyển.",w/2,0,Graphics.TOP|Graphics.HCENTER);
g.drawString("nhấn * để thay đổi đối tượng",w/2,0+g.getFont().getHeight(),Graphics.TOP|Graphics.HCENTER);
repaint();
}
protected void keyPressed(int k){
//nếu mot==true thì ta điều khiển quân 0, sai ta điều khiển quân 2
//tìm ra vị trí trống có thể đi tiếp
int focus=mot?0:2,move=free();
//nếu chưa xong game thì cho di chuyển
if(!finish)
//nếu như bấm phím 5 thì cho di chuyển
if(k==KEY_NUM5||k==-5)
//nếu di chuyển được thì cho auto di chuyển
if(move(focus,move)){
auto();}
//nếu không thì chuyển qua quân còn lại di chuyển, nếu được thì auto di chuyển
else if(move(focus==0?2:0,move)){
auto();
}
//ngược lại thì thua và kết thúc trò chơi
else{finish=true; win=false;}
//nhấn phím * để thay đổi đối tượng điều khiển
if(k==KEY_STAR)mot=!mot;}
//di chuyển nhân vật tự động
void auto(){
//tìm ra vị trí còn trống
int move=free();
//chọn ngẫu nhiên nhân vật tự động giữa 1 và 3
int focus=rd.nextInt()%2==0?1:3;
//cho di chuyển, nếu 1 không di chuyển thì chuyển qua 3 và ngược lại
if(move(focus,move)){}else{
//nếu cả 1 và 3 đều không còn di chuyển được nữa thì kết thúc trò chơi, người chơi thắng
if(!move(focus==1?3:1,move)){
finish=true;
win=true;}}}
//vẽ bàn cờ
void vebanco(Graphics g){
g.setColor(0xf0f000);
//vẽ 2 gạch chéo bàn cờ
g.drawLine(dx+moc[0[0,dy+moc[0[1,dx+moc[3[0,dy+moc[3[1);
g.drawLine(dx+moc[1[0, dy+moc[1[1,dx+moc[2[0, dy+moc[2[1);
//vẽ khung vuông bàn cờ
g.drawRect(dx, dy, 128, 128);
//vẽ nơi dành cho con chó, chữ "chó"
g.drawString("chó",dx+64,dy,Graphics.BASELINE|Graphics.HCENTER);
}
//vẽ các quân cờ
void vequanco(Graphics g){
//xác định đối tượng đang chọn, 0 hay là 2
int focus=mot?0:2;
for(int i=0;i<4;i++){
//tìm ra vị trí hiện tại của quân được chọn
int pos=quan[i.position;
//vẽ con trỏ chọn đối tượng
if(i==focus){
g.setColor(0xf00000);
g.fillArc(dx+moc[pos[0-9, dy+moc[pos[1-9, 18, 18, 0, 360);}
g.setColor(quan[i.color);
g.fillArc(dx+moc[pos[0-8, dy+moc[pos[1-8, 16, 16, 0, 360);
}
}
//kiểm tra xem có thể chuyển từ vị trí này tới vị trí trống được ko
boolean cango(int pos,int npos){
if(pos==1&&npos==2)return false;
if(pos==2&&npos==1)return false;
if(pos==0&&npos==3)return false;
if(pos==3&&npos==0)return false;
if(pos==0&&npos==2)return false;
if(pos==2&&npos==0)return false;
return true;}
//tìm ra vị trí còn trống
int free(){
//kiểm tra trong mảng free xem có vị trí nào trống thì trả lại
for(int i=0;i<5;i++){
if(free[i)return i;}
return 0;}
//cho di chuyển và nếu di chuyển được thì trả lại giá trị đúng sai
boolean move(int pos,int npos){
if(cango(quan[pos.position,npos)){
//đặt vị trí đang đứng thành trống
free[quan[pos.position=true;
//cho chuyển sang vị trí mới
quan[pos.position=npos;
//đặt vị trí mới không còn trống nữa
free[quan[pos.position=false;
return true;}
return false;}
}
?>
Copy code
Và cũng cần có file Midlet.java để ứng dụng có thể hiện thị được. Cái này thì cũng đơn giản và quen quá rồi.
C:\Users\thanhliem\Documents\NetBeansProjects\Tree\src\Midlet.java
<?php
public class Midlet extends MIDlet {
public void startApp() {
Display.getDisplay(this).setCurrent(new banco(this));
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
?>
Copy code
public class Midlet extends MIDlet {
public void startApp() {
Display.getDisplay(this).setCurrent(new banco(this));
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
?>
Copy code
Source: Tree-99352.zip
Jar: Tree-17566.jar
Trực Tuyến:
Khách: 1





