[ iT ] Forums: Giúp em Code chương trình chơi cờ CaRo với!! - [ iT ] Forums

Jump to content


Balloon vs. Thorns

MU Phuc Hung

Làm Việc Tài Nhà

Mu Da Nang

Tuyển Nhân Viên Bán Hàng

Mu Moi ra





Note:

Vui lòng viết Tv có dấu
Trang 1 / 1
  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời cho chủ đề này

Giúp em Code chương trình chơi cờ CaRo với!! Đánh Giá: -----

#1 User is offline   tieuphugia2412 

  • Nhóm: Advance Member
  • Bài Viết: 21
  • Gia Nhập: 22-April 07
  • Thành viên mới

  Gửi vào 08 July 2008 - 08:47 AM

Chương trình Caro giữa 2 người chơi với nhau! Em đang gặp khó khăn
MOng các anh giúp đỡ cho em cái Code (lập trình = Win32 API)
KHó quá :yes !!
Cám ơn các bạn rất nhiều 8->
0

#2 User is offline   hoang_daoduy 

  • Nhóm: Advance Member
  • Bài Viết: 463
  • Gia Nhập: 29-November 07
  • Trung cấp CSTH
  • PipPipPip

Gửi vào 08 July 2008 - 01:41 PM

Bạn phải nói rõ hơn thì mọi người mới giúp được bạn chứ, quan trọng bạn muốn hỏi mọi người là thuật giải như thế nào, hay là cách trình bày chương trình như thế nào, hay là như thế nào....
LuônNgay là đôi bạn thân.
Sống trên đời phải biết 2 chữ: TríNhẫn
0

#3 User is offline   tieuphugia2412 

  • Nhóm: Advance Member
  • Bài Viết: 21
  • Gia Nhập: 22-April 07
  • Thành viên mới

  Gửi vào 08 July 2008 - 03:20 PM

View PostZZZZZZZZZZZZZZ, on Jul 8 2008, 01:41 PM, said:

Bạn phải nói rõ hơn thì mọi người mới giúp được bạn chứ, quan trọng bạn muốn hỏi mọi người là thuật giải như thế nào, hay là cách trình bày chương trình như thế nào, hay là như thế nào....




em bị bí ở cái phần kiểm tra thắng thua!!
5 con liên tục sẽ thắng ( chéo ngang thẳng )
Em ko thể kiểm tra được >:)
0

#4 User is offline   gaconhocbay 

  • Nhóm: Advance Member
  • Bài Viết: 61
  • Gia Nhập: 04-July 08
  • Căn bản tin học tốt
  • Pip

Gửi vào 08 July 2008 - 03:30 PM

View Posttieuphugia2412, on Jul 8 2008, 03:20 PM, said:

em bị bí ở cái phần kiểm tra thắng thua!!
5 con liên tục sẽ thắng ( chéo ngang thẳng )
Em ko thể kiểm tra được >:)


nếu bạn đã làm rồi thì post code lên để mọi người giúp

còn nhờ làm giùm thì .................... :d" xin lỗi , đó ko phải là chia sẻ kiến thức , mà là làm giùm . Lập trình như vậy , chừng nào thành công ?
0

#5 User is offline   hoang_daoduy 

  • Nhóm: Advance Member
  • Bài Viết: 463
  • Gia Nhập: 29-November 07
  • Trung cấp CSTH
  • PipPipPip

Gửi vào 08 July 2008 - 08:21 PM

Quote

nếu bạn đã làm rồi thì post code lên để mọi người giúp

còn nhờ làm giùm thì .................... xin lỗi , đó ko phải là chia sẻ kiến thức , mà là làm giùm . Lập trình như vậy , chừng nào thành công ?

CHính xác đó

Còn nếu bạn muốn gợi ý, ok, tại 1 vị trí trong ma trận bạn kiểm tra xem tất cả các hướng của nó đi có tạo ra 1 điều kiện để chiến thắng không
Ví dụ

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

giả dụ tôi đang xét ở vị trí (1,1) tôi thấy đây là 1 điểm, tôi sẽ kiểm tra xem sang trái và sang phải có kết hợp được điều kiện không, kiểm tra xem lên trên xuống dưới có kết hợp được không, kiểm tra xem chéo trên phải và chéo dưới trái có kết hợp được không, và xem chéo trên trái và chéo dưới phải kết hợp được ra điều kiện không

tôi thấy chéo trên trái và chéo dưới phải kết hợp lại ra được 4 (cứ gọi là điểm) và không bị chặn
tức là đó là điều kiện thắng.

Cờ thông minh là do sự ước lượng của thuật toán tốt

Good Luck !
LuônNgay là đôi bạn thân.
Sống trên đời phải biết 2 chữ: TríNhẫn
0

#6 User is offline   giusep0903 

  • Nhóm: Newbies
  • Bài Viết: 1
  • Gia Nhập: 24-October 09
  • Thành viên mới

Gửi vào 08 April 2010 - 02:53 AM

View Posttieuphugia2412, on Jul 8 2008, 08:47 AM, said:

Chương trình Caro giữa 2 người chơi với nhau! Em đang gặp khó khăn
MOng các anh giúp đỡ cho em cái Code (lập trình = Win32 API)
KHó quá :- !!
Cám ơn các bạn rất nhiều :-/

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.util.*;

public class GameCaro extends MIDlet implements CommandListener{
private Display display;
private Command cmdExit;
private MyGame canvas ;
Table table = new Table();
Command cmdSize, cmdLevel, cmdFirst, cmdHelp, cmdReturn;
int size=1;
public GameCaro() {
// TODO Auto-generated constructor stub
display = Display.getDisplay(this);
canvas = new MyGame(display);
try{
cmdExit = new Command("Exit",Command.EXIT,1);
canvas.addCommand(cmdExit);
addMenu();
canvas.setCommandListener(this);
}
catch(Exception e) {e.printStackTrace();}
canvas.update(canvas.PREPARE);
}

protected void destroyApp(boolean unconditional) {
// TODO Auto-generated method stub

}

protected void pauseApp() {
// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
display.setCurrent(canvas);
}
private void addMenu()
{
//Size
if (size == 0) cmdSize = new Command("Size : Small", Command.OK, 1);
else if (size == 1) cmdSize = new Command("Size : Standard", Command.OK, 1);
else if (size == 2) cmdSize = new Command("Size : Large", Command.OK, 1);
canvas.addCommand(cmdSize);
//Level
if (table.level == 0) cmdLevel = new Command("Level : Easy", Command.OK, 2);
else if (table.level == 1) cmdLevel = new Command("Level : Normal", Command.OK, 2);
else if (table.level == 2) cmdLevel = new Command("Level : Hard", Command.OK, 2);
canvas.addCommand(cmdLevel);
//Fisrt
if (canvas.humanfirst) cmdFirst = new Command("First : You", Command.OK, 3);
else cmdFirst = new Command("First : Computer", Command.OK, 3);
canvas.addCommand(cmdFirst);
//Other
cmdHelp = new Command("Help",Command.OK,4);
cmdReturn = new Command("Return",Command.OK,5);
//cmdUndo = new Command("Undo",Command.OK,6);
canvas.addCommand(cmdHelp);
canvas.addCommand(cmdReturn);
}

public void commandAction(Command c, Displayable arg1) {
// TODO Auto-generated method stub
if(c==cmdExit)
{
destroyApp(false);
notifyDestroyed();
}
else
if(c.getCommandType() == Command.OK)
{
if (c.getPriority() == 1)
{
size = (size + 1) % 3;
if (size == 0) canvas.d = canvas.getWidth()/10;
else if (size == 1) canvas.d = canvas.getHeight()/14;
else if (size == 2) canvas.d = canvas.getWidth()/18;
}
else if (c.getPriority() == 2) table.level = (table.level + 1) % 3;
else if (c.getPriority() == 3) canvas.humanfirst = !canvas.humanfirst;
else if (c.getPriority() == 4) {canvas.update(canvas.DISPLAYHELP);return;}

else {canvas.update(canvas.REFRESH);return;};
//New table
canvas.update(canvas.PREPARE);
canvas.removeCommand(cmdSize);
canvas.removeCommand(cmdLevel);
canvas.removeCommand(cmdFirst);
canvas.removeCommand(cmdHelp);
canvas.removeCommand(cmdReturn);
addMenu();
}
}
}
////////////////////////////////////
class MyGame extends Canvas
{
Display d1;
//Status
int userid = 1; int comid = 2;
int NOTHING = 0, PREPARE = 1, KEYMOVE = 2, DISPLAYRESULT = 3, KEYENTER = 4, DISPLAYHELP = 5, REFRESH = 6;
boolean userwin = true;
int status = 0;
int bannerwidth = 80, bannerheight = 40;
int bannerx = (getWidth() - bannerwidth)/2;
int bannery = getHeight()-bannerheight-15;
//Parameter
boolean humanfirst = true;
int m, n, d = getWidth()/18, ox, oy;
int x, y, xc, yc, xold, yold;
Table table = new Table();
//Color
int drawX, drawY, drawStatus;
int backcolor = 16777215;
int bordercolor = 150*65536+150*256+150;
int selectcolor = 13754970;

public MyGame(Display d1)
{
this.d1 = d1;

}

////////////////////////////////
public void drawCell(Graphics g, int i, int j, int status)
{
//Draw border

if (status == 0) g.setColor(backcolor);
//mau nen hop move
else g.setColor(selectcolor);
//mau vien hop move
g.fillRect(ox + i*d, oy + j*d, d, d);
g.setColor(bordercolor);
g.drawRect(ox + i * d, oy + j * d, d, d);
if ((i >= 0) && (j >= 0) && (i < m) && (j < n))
{
if (table.cell[j] == 1) {
g.setColor(255, 0, 0);//mau cua nguoi choi
g.drawLine(ox + i * d + 2, oy + j * d + 2, ox + (i + 1) * d - 2,oy + (j + 1) * d - 2);
g.drawLine(ox + i * d + 2, oy + j * d + 3, ox + (i + 1) * d - 2,oy + (j + 1) * d - 3);
g.drawLine(ox + (i + 1) * d - 2, oy + j * d + 2, ox + i * d + 2,oy + (j + 1) * d - 2);
g.drawLine(ox + (i + 1) * d - 2, oy + j * d + 3, ox + i * d + 2,oy + (j + 1) * d - 3);
}
else if (table.cell[j] == 2) {
g.setColor(0, 0, 255);//mau o chon cua may
g.drawArc(ox + i * d+1, oy + j * d+1, d-2, d-2, 0, 360);
g.drawArc(ox + i * d+2, oy + j * d+2, d-4, d-4, 0, 360);
//g.fillArc(ox + i * d+4, oy + j * d+4, d, d, 0, 360);

}
}
}

/////////////////////////////////
protected void paint(Graphics g)
{
int i,j;

//Prepare game
if (status == PREPARE)
{
//Create variable
m = getWidth() / d; n = getHeight() / d;
ox = (getWidth() - m * d)/2; oy = (getHeight() - n * d) /2;
table.cell = new int[m][n];
table.score = new int[m][n];
table.score1 = new int[m][n];
table.m = m; table.n = n;
for(i=0; i<m; i++)
for(j=0; j<n; j++)
table.cell[j] = 0;
//Draw Table mau nen cua table
g.setColor(backcolor);
g.fillRect(0,0,getWidth(),getHeight());
//g.drawString("hao",111,11, 0);
//mau cua duong trong table
g.setColor(bordercolor);
for(i=0; i<=m; i++)
g.drawLine(ox + i * d, 0, ox + i * d, getHeight());
for(i=0; i<=n; i++)
g.drawLine(0, oy + i * d,getWidth(), oy + i * d);
x = xold = m/2; y = yold = n/2;
if (!humanfirst)
table.cell[x][y] = comid;
drawCell(g, x, y, 1);
}
else if (status == KEYMOVE)
{
drawCell(g, xold, yold, 0);
drawCell(g, x, y, 1);
xold = x; yold = y;
}
else if (status == KEYENTER)
{
drawCell(g, xc, yc, 0);
drawCell(g, x, y, 1);
xold = x; yold = y;
}
else if (status == REFRESH)
{
g.setColor(backcolor);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(bordercolor);
for(i=0; i<=m; i++)
g.drawLine(ox + i * d, 0, ox + i * d, getHeight());
for(i=0; i<=n; i++)
g.drawLine(0, oy + i * d,getWidth(), oy + i * d);
for(i=0; i<m; i++)
for(j=0; j<n; j++)
if (table.cell[j] != 0) drawCell(g, i, j, 0);
drawCell(g, x, y, 1);
}
else if (status == DISPLAYHELP)
{
g.setColor(backcolor);
g.fillRect(0, 0, getWidth(), getHeight());
g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_LARGE));
g.setColor(50,0,0);
g.drawString("Caro",111,11,0);
g.setColor(255,0,0);
g.drawString("Caro",110,10,0);
g.setColor(0,0,255);
g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_SMALL));
g.drawString("Khuat Duy Hao",10,35,0);
g.drawString("Vu Manh Hung",10,45,0);
g.drawString("Nguyen The Anh",10,55,0);
g.drawString("Tran Thanh Binh",10,65,0);
g.drawString("Keys : U, D, L, R, 1", 10, 95, 0);
g.drawString("Press 1 to continue...",10,115,0);

}
else if (status == DISPLAYRESULT)
{
drawCell(g, x, y, 0);
drawCell(g, xc, yc, 0);
if (userwin)
{

g.setColor(0,255,0);
g.fillRect(bannerx, bannery, bannerwidth, bannerheight);
g.setColor(bordercolor);
g.drawRect(bannerx, bannery, bannerwidth, bannerheight);
g.drawRect(bannerx+1, bannery+1, bannerwidth-2, bannerheight-2);
g.setColor(0);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
g.drawString("You win", bannerx+12, bannery+2, 0);
g.drawString("Press 1...", bannerx+10, bannery+18, 0);
}
else
{
g.setColor(255,0,0);
g.fillRect(bannerx, bannery, bannerwidth, bannerheight);
g.setColor(bordercolor);
g.drawRect(bannerx, bannery, bannerwidth, bannerheight);
g.drawRect(bannerx+1, bannery+1, bannerwidth-2, bannerheight-2);
g.setColor(backcolor);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
g.drawString("You lose", bannerx+10, bannery+2, 0);
g.drawString("Press 1...", bannerx+10, bannery+18, 0);

}
}
}
//////////////////////////////
void update(int status)
{
this.status = status;

repaint();
}
///////////////////////////////
public void keyPressed(int keyCode)
{
if (status == DISPLAYRESULT)
{
if (keyCode == KEY_NUM1) update(PREPARE);
return;
}
if (status == DISPLAYHELP)
{
if (keyCode == KEY_NUM1) update(REFRESH);
return;
}
int gameAction = getGameAction(keyCode);
switch(gameAction)
{
case LEFT:
if (x > 0) x--;
else x = m - 1;
update(KEYMOVE);
break;
case RIGHT:
if (x < m - 1) x++;
else x = 0;
update(KEYMOVE);
break;
case UP:
if (y > 0) y--;
else y = n - 1;
update(KEYMOVE);
break;
case DOWN:
if (y < n - 1) y++;
else y = 0;
update(KEYMOVE);
break;
case FIRE:
if (table.cell[x][y] != 0) return;
table.cell[x][y] = userid;
if (table.checkwin()) {userwin = true; update(DISPLAYRESULT); return;};
table.findSolution();
table.cell[table.resX][table.resY] = comid;
xc = table.resX; yc = table.resY;
if (table.checkwin()) {userwin = false; update(DISPLAYRESULT); return;};
update(KEYENTER);
break;

}

}
}
//////////////////////////////////////
class Table {
int [][]cell;
int [][]score;//ti so
int [][]score1;
int m, n, kh, resX, resY, level = 1;
Random r;

public Table()
{
Date d = new Date();
r = new Random(d.getTime());
}

void think(int x, int y, int dx, int dy)
{
int i, j, k, d1, d2, s;
//Calculate score
i = x; j = y;
d1 = 0; d2 = 0;
for(k=0; k<=4; k++)
{
if (cell[j] == 1) d1++;
if (cell[j] == 2) d2++;
i += dx; j+=dy;
}
if ((d1 >0) && (d2 >0)) return;
if (kh == 2) d1 = d2;
if (d1 == 0) return;
s = 1;
for(k = 2; k<=d1; k++) s*=10;
//Xem co bi chan 2 dau?
boolean ok = true;
if ((i >= 0) && (i < m) && (j >= 0) && (j <n))
ok = (cell[j] != kh);
i = i - 6 * dx; j = j - 6 * dy;
if ((i >= 0) && (i < m) && (j >= 0) && (j <n))
ok = ok && (cell[j] != kh);
if (ok) s*=2;
//Update score for each cell
i = x; j = y;
for(k=0; k<=4; k++)
{
score[j] += s;
i+=dx; j+=dy;
}
}

public void leveluate() //danh gia
{
int i, j;
//Clean score
for(i=0; i<m; i++)
for(j=0; j<n; j++)
score[j] = 0;
//leveluate score of all cell
for(i=0; i<m; i++)
for(j=0; j<n; j++)
{
//Direction down
if (j+4 < n) think(i,j,0,1);
//Direction down-right
if ((i+4 <m) && (j+4 < n)) think(i,j,1,1);
//Direction right
if (i+4 <m) think(i,j,1,0);
//Direction down-left
if ((i+4 <m) && (j >= 4)) think(i,j,1,-1);
}
}

public boolean check5(int i, int j, int dx, int dy)
{
int i1, j1, t, s;
i1 = i; j1 = j;
s = 1;
for (t=1; t<=4; t++)
{
i1 += dx;
j1 += dy;
if ((i1 >=0) && (i1 < m) && (j1 >=0) && (j1 <n))
if (cell[j] == cell[i1][j1]) s++;
}
if (s == 5) return true;
else return false;
}

public boolean checkwin()
{

for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
if(cell[j] !=0)
{
if (check5(i, j, 0, 1)) return true;
if (check5(i, j, 1, 0)) return true;
if (check5(i, j, 1, 1)) return true;
if (check5(i, j, 1, -1)) return true;
}
return false;
}

boolean equivalent(int d1, int d2)//tuong duong
{
int e1, e2, t, i;
t = 1000;
for(i=1; i<=3; i++)
{
e1 = d1 / t; e2 = d2 / t;
if ((e1 > 0) || (e2 > 0))
if (e1 == e2)return true;
else return false;
t = t / 10;
}
return true;
}

public void findSolution()
{
int max, max1, max2;
int i, j, t, li=1, lj=1, li1=1, lj1=1, li2=1, lj2=1;
//Human
max1 = 0; kh = 1;
leveluate();
for(i=0; i<m; i++)
for(j=0; j<n; j++)
{
score1[j] = score[j];
if (cell[j] == 0)
if(max1 < score[j])
{
max1 = score[j];
li1 = i; lj1 = j;
}
else if (max1 == score[j])
{
t = r.nextInt() % 2;
if (t == 1) {li1 = i; lj1 = j;};
}
}
//Computer
max2 = 0; kh = 2;
leveluate();
for(i=0; i<m; i++)
for(j=0; j<n; j++)
if (cell[j] == 0)
if(max2 < score[j])
{
max2 = score[j];
li2 = i; lj2 = j;
}
else if (max2 == score[j])
{
t = r.nextInt() % 2;
if (t == 1) {li2 = i; lj2 = j;};
}
if (level == 1)
{
if (max1 < max2) {resX=li2; resY=lj2;}
else {resX=li1; resY=lj1;};
}
else
{
if (equivalent(max1, max2)) {
max = 0;
if (max2 >= 1000) {resX = li2;resY = lj2;}
else if (level == 2) {
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
if (cell[j] == 0)
if (max < score[j] + score1[j]) {
max = score[j] + score1[j];
li = i;
lj = j;
}
resX = li; resY = lj;
}
else {
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
if (cell[j] == 0)
if (max < score[j]*2 + score1[j]) {
max = score[j]*2 + score1[j];
li = i;
lj = j;
}
resX = li; resY = lj;
}
}
else {
if (max1 < max2) {resX = li2;resY = lj2;}
else {resX = li1;resY = lj1;}
}
}
}
}
0

#7 User is offline   singapomafia 

  • Nhóm: Advance Member
  • Bài Viết: 357
  • Gia Nhập: 11-March 07
  • Trung cấp CSTH
  • PipPipPip

Gửi vào 03 August 2010 - 01:51 AM

có ai giải được cờ caro dùng Btree hem, ma trận tốn thời gian search quá
Viết web application, application theo đơn đặt hàng.
0

#8 User is offline   0935387086 

  • Nhóm: Member
  • Bài Viết: 315
  • Gia Nhập: 15-April 10
  • Trung cấp CSTH
  • PipPipPip

Gửi vào 02 September 2010 - 01:07 AM

up
0

#9 User is offline   gng 

  • Nhóm: Newbies
  • Bài Viết: 2
  • Gia Nhập: 08-September 10
  • Thành viên mới

Gửi vào 08 September 2010 - 01:58 AM

Bạn có thể đăng ký học miễn phí Siverlight và Joomla tại không gian xanh
==>
http://hocviencntt.org

0

Chia sẻ chủ để


Trang 1 / 1
  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời cho chủ đề này

1 người đang đọc chủ đề này
0 thành viên, 1 khách, 0 thành viên ẩn