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

Welcome to [ iT ] Forums
Register now to gain access to all of our features. Once registered and logged in, you will be able to create topics, post replies to existing threads, give reputation to your fellow members, get your own private messenger, post status updates, manage your profile and so much more. If you already have an account, login here - otherwise create an account for free today!
MU Moi ra - MU SS2

MU Moi ra - MU 3

MU Moi ra - MU Online

MU Moi ra - MU Hai Phong

Hình ảnh

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

- - - - -

  • Please log in to reply
8 replies to this topic

#1
tieuphugia2412

tieuphugia2412

    Thành viên mới

  • Advance Member
  • 21 Bài Viết:
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->

#2
hoang_daoduy

hoang_daoduy

    Trung cấp CSTH

  • Advance Member
  • PipPipPip
  • 463 Bài Viết:
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

#3
tieuphugia2412

tieuphugia2412

    Thành viên mới

  • Advance Member
  • 21 Bài Viết:

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 >:)

#4
gaconhocbay

gaconhocbay

    Căn bản tin học tốt

  • Advance Member
  • Pip
  • 61 Bài Viết:

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 ?

#5
hoang_daoduy

hoang_daoduy

    Trung cấp CSTH

  • Advance Member
  • PipPipPip
  • 463 Bài Viết:

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

#6
giusep0903

giusep0903

    Thành viên mới

  • Newbies
  • 1 Bài Viết:

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;}
}
}
}
}

#7
singapomafia

singapomafia

    Trung cấp CSTH

  • Advance Member
  • PipPipPip
  • 357 Bài Viết:
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.

#8
0935387086

0935387086

    Trung cấp CSTH

  • Member
  • PipPipPip
  • 315 Bài Viết:
up

#9
gng

gng

    Thành viên mới

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





0 người đang đọc chủ đề này

0 thành viên, 0 khách, 0 thành viên ẩn