Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Mô phỏng trò chơi cờ tướng bằng C??

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    22

    Question Mô phỏng trò chơi cờ tướng bằng C??

    Mình tạo 1 file defs10.h như sau:
    C Code:
    1. #define MAX_PLY         4
    2. #define VERSION         "1.0"
    3.  
    4. #define SIZE_X          9
    5. #define SIZE_Y          10
    6. #define BOARD_SIZE      SIZE_X*SIZE_Y
    7.  
    8. #define MOVE_STACK      4096
    9. #define HIST_STACK      50
    10.  
    11. #define EMPTY           7
    12. #define DARK            0
    13. #define LIGHT           1
    14.  
    15. #define PAWN            0
    16. #define BISHOP          1
    17. #define ELEPHAN         2
    18. #define KNIGHT          3
    19. #define CANNON          4
    20. #define ROOK            5
    21. #define KING            6
    22.  
    23. #define INFINITY        20000
    24. #define NORMAL          0
    25. #define SELECT          1
    26.  
    27. typedef struct {
    28.         short from, dest;
    29. } move;
    30.  
    31. typedef struct {
    32.     move    m;
    33. } gen_rec;
    34.  
    35. typedef struct {
    36.     move m;
    37.     int capture;
    38. } hist_rec;

    Sau đó có code như sau:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4. #include "defs10.h"
    5.  
    6.  
    7. /* the board representation && the initial board state */
    8. char color[BOARD_SIZE]= {
    9.         0, 0, 0, 0, 0, 0, 0, 0, 0,
    10.         7, 7, 7, 7, 7, 7, 7, 7, 7,
    11.         7, 0, 7, 7, 7, 7, 7, 0, 7,
    12.         0, 7, 0, 7, 0, 7, 0, 7, 0,
    13.         7, 7, 7, 7, 7, 7, 7, 7, 7,
    14.         7, 7, 7, 7, 7, 7, 7, 7, 7,
    15.         1, 7, 1, 7, 1, 7, 1, 7, 1,
    16.         7, 1, 7, 7, 7, 7, 7, 1, 7,
    17.         7, 7, 7, 7, 7, 7, 7, 7, 7,
    18.         1, 1, 1, 1, 1, 1, 1, 1, 1};
    19.  
    20. char piece[BOARD_SIZE]= {
    21.         5, 3, 2, 1, 6, 1, 2, 3, 5,
    22.         7, 7, 7, 7, 7, 7, 7, 7, 7,
    23.         7, 4, 7, 7, 7, 7, 7, 4, 7,
    24.         0, 7, 0, 7, 0, 7, 0, 7, 0,
    25.         7, 7, 7, 7, 7, 7, 7, 7, 7,
    26.         7, 7, 7, 7, 7, 7, 7, 7, 7,
    27.         0, 7, 0, 7, 0, 7, 0, 7, 0,
    28.         7, 4, 7, 7, 7, 7, 7, 4, 7,
    29.         7, 7, 7, 7, 7, 7, 7, 7, 7,
    30.         5, 3, 2, 1, 6, 1, 2, 3, 5};
    31.  
    32. /* For getting information */
    33. unsigned long   nodecount, brandtotal = 0, gencount = 0;
    34. char    ply, side, xside, computerside;
    35. move    newmove;
    36. gen_rec gen_dat[MOVE_STACK];
    37. short   gen_begin[HIST_STACK], gen_end[HIST_STACK];
    38. hist_rec hist_dat[HIST_STACK];
    39. short   hdp;
    40.  
    41. volatile unsigned long *systicks=(unsigned long *)0x46C; /* Clock counter */
    42. unsigned long tickstart, tickend;
    43.  
    44. /***** INTERFACE *****/
    45. void MoveTo(short x, short y)
    46. {
    47.     gotoxy (5*x+1, 2*y+1);
    48. }
    49.  
    50.  
    51. void DrawCell(short pos, short mode)
    52. {
    53.     char piece_char[] = "PBENCRK+"; /*"TSVMPXT+"; /* the piece letters */
    54.  
    55.     if (color[pos]==DARK) textcolor(13);
    56.     else if (color[pos]==LIGHT) textcolor(14); else textcolor(7);
    57.     if (mode==NORMAL) textbackground(0); else textbackground(1);
    58.     MoveTo(pos%9, pos/9);
    59.     cprintf("%c", piece_char[piece[pos]]);
    60. }
    61.  
    62.  
    63. void DrawBoard(void)
    64. {
    65.     int i;
    66.     textcolor(7); textbackground(0); clrscr(); gotoxy(1,1);
    67.     printf("+----+----+----+----+----+----+----+----+  9\n");
    68.     printf("|    |    |    | \\  |  / |    |    |    |\n");
    69.     printf("+----+----+----+----+----+----+----+----+  8\n");
    70.     printf("|    |    |    | /  |  \\ |    |    |    |\n");
    71.     printf("+----+----+----+----+----+----+----+----+  7\n");
    72.     printf("|    |    |    |    |    |    |    |    |\n");
    73.     printf("+----+----+----+----+----+----+----+----+  6\n");
    74.     printf("|    |    |    |    |    |    |    |    |\n");
    75.     printf("+----+----+----+----+----+----+----+----+  5\n");
    76.     printf("|                                       |\n");
    77.     printf("+----+----+----+----+----+----+----+----+  4\n");
    78.     printf("|    |    |    |    |    |    |    |    |\n");
    79.     printf("+----+----+----+----+----+----+----+----+  3\n");
    80.     printf("|    |    |    |    |    |    |    |    |\n");
    81.     printf("+----+----+----+----+----+----+----+----+  2\n");
    82.     printf("|    |    |    | \\  |  / |    |    |    |\n");
    83.     printf("+----+----+----+----+----+----+----+----+  1\n");
    84.     printf("|    |    |    | /  |  \\ |    |    |    |\n");
    85.     printf("+----+----+----+----+----+----+----+----+  0\n");
    86.     printf("A    B    C    D    E    F    G    H    I\n");
    87.     gotoxy(1,25); printf("Up, Down, Right, Left: cursor move   Enter or Space: select  ESC: escape");
    88.     gotoxy(48,1); cprintf("VERY SIMPLE CHINESE CHESS PROGRAM");
    89.     for (i=0; i<BOARD_SIZE; i++) DrawCell(i, NORMAL);
    90. }
    91.  
    92.  
    93. void Gen(void);
    94.  
    95. short GetHumanMove(void)
    96. {
    97.     static short x = 4, y = 5;
    98.     short ch, from, t, i, selecting = 0;
    99.  
    100.     Gen();       /* for check legal move only */
    101.  
    102.     while (1) {
    103.         MoveTo (x, y);
    104.         ch = (short)getch();
    105.         switch (ch) {
    106.         case 13:
    107.         case 32:                        /* Enter or Spacebar */
    108.             t = x + y*SIZE_X;
    109.             if (!selecting) {
    110.                 if (color[t]==side) {
    111.                     selecting = 1; from = t; DrawCell(t, SELECT);
    112.                 }
    113.             } else {
    114.                 if (t != from) DrawCell(from, NORMAL);
    115.                 if (color[t]==side) {
    116.                     from = t; DrawCell(t, SELECT);
    117.                 } else {
    118.                     newmove.from = from; newmove.dest = t;
    119.                     for (i=gen_begin[ply]; i<gen_end[ply]; i++)
    120.                         if (gen_dat[i].m.from==newmove.from && gen_dat[i].m.dest==newmove.dest) return 0;
    121.                     DrawCell(from, SELECT);
    122.                 }
    123.             }
    124.             break;
    125.  
    126.         case 27:  return 1;     /* ESC */
    127.  
    128.         case 0:
    129.                 ch = (short)getch();
    130.                 switch (ch) {
    131.                 case 75: if (x) x--; else x = SIZE_X-1; break;  /* LEFT */
    132.                 case 77: if (x<SIZE_X-1) x++; else x = 0; break;    /* RIGHT */
    133.                 case 72: if (y) y--; else y = SIZE_Y-1; break;  /* UP */
    134.                 case 80: if (y<SIZE_Y-1) y++; else y = 0; break;    /* DOWN */
    135.                 }
    136.                 break;
    137.         } /* switch */
    138.     } /* while */
    139. }
    140.  
    141.  
    142. /**** MOVE GENERATE ****/
    143. short offset[7][8] =
    144.         {{-1, 1,13, 0, 0, 0, 0, 0},     /* PAWN {for DARK side} */
    145.         {-12,-14,12,14,0,0,0,0},        /* BISHOP */
    146.         {-28,-24,24,28, 0, 0, 0, 0 },   /* ELEPHAN */
    147.         {-11,-15,-25,-27,11,15,25,27},  /* KNIGHT */
    148.         {-1, 1,-13,13, 0, 0, 0, 0},     /* CANNON */
    149.         {-1, 1,-13,13, 0, 0, 0, 0},     /* ROOK */
    150.         {-1, 1,-13,13, 0, 0, 0, 0}};    /* KING */
    151.  
    152. short mailbox182[182] =
    153.         {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    154.         -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    155.         -1,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8,-1,-1,
    156.         -1,-1, 9,10,11,12,13,14,15,16,17,-1,-1,
    157.         -1,-1,18,19,20,21,22,23,24,25,26,-1,-1,
    158.         -1,-1,27,28,29,30,31,32,33,34,35,-1,-1,
    159.         -1,-1,36,37,38,39,40,41,42,43,44,-1,-1,
    160.         -1,-1,45,46,47,48,49,50,51,52,53,-1,-1,
    161.         -1,-1,54,55,56,57,58,59,60,61,62,-1,-1,
    162.         -1,-1,63,64,65,66,67,68,69,70,71,-1,-1,
    163.         -1,-1,72,73,74,75,76,77,78,79,80,-1,-1,
    164.         -1,-1,81,82,83,84,85,86,87,88,89,-1,-1,
    165.         -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
    166.         -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
    167.  
    168. short mailbox90[90] =
    169.         {28, 29, 30, 31, 32, 33, 34, 35, 36,
    170.          41, 42, 43, 44, 45, 46, 47, 48, 49,
    171.          54, 55, 56, 57, 58, 59, 60, 61, 62,
    172.          67, 68, 69, 70, 71, 72, 73, 74, 75,
    173.          80, 81, 82, 83, 84, 85, 86, 87, 88,
    174.          93, 94, 95, 96, 97, 98, 99,100,101,
    175.         106, 107,108,109,110,111,112,113,114,
    176.         119, 120,121,122,123,124,125,126,127,
    177.         132, 133,134,135,136,137,138,139,140,
    178.         145, 146,147,148,149,150,151,152,153};
    179.  
    180. short legalposition[90] =
    181.         {1, 1, 5, 3, 3, 3, 5, 1, 1,
    182.         1, 1, 1, 3, 3, 3, 1, 1, 1,
    183.         5, 1, 1, 3, 7, 3, 1, 1, 5,
    184.         1, 1, 1, 1, 1, 1, 1, 1, 1,
    185.         9, 1,13, 1, 9, 1,13, 1, 9,
    186.         9, 9, 9, 9, 9, 9, 9, 9, 9,
    187.         9, 9, 9, 9, 9, 9, 9, 9, 9,
    188.         9, 9, 9, 9, 9, 9, 9, 9, 9,
    189.         9, 9, 9, 9, 9, 9, 9, 9, 9,
    190.         9, 9, 9, 9, 9, 9, 9, 9, 9};
    191.  
    192. short maskpiece[7] = {8, 2, 4, 1, 1, 1, 2},
    193.     knightcheck[8] = {1,-1,-9,-9,-1,1,9,9},
    194.     elephancheck[8] = {-10,-8,8,10,0,0,0,0},
    195.     kingpalace[9] = {3,4,5,12,13,14,21,22,23};
    196.  
    197.  
    198. void InitGen(void)
    199. {
    200.     gen_begin[0] = 0; ply = 0; hdp = 0;
    201. }
    202.  
    203.  
    204. short KingFace(short from, short dest)
    205. {
    206.     short i, k, t, r = 0;
    207.     i = from % SIZE_X;
    208.     if (i>=3 && i<=5 && piece[dest]!=KING) {
    209.         t = piece[dest]; piece[dest] = piece[from]; piece[from] = EMPTY;
    210.         i = 0;
    211.         for (k=kingpalace[i]; piece[k]!=KING; k++) ;
    212.         for (k += SIZE_X; k<BOARD_SIZE && piece[k]==EMPTY; k += SIZE_X);
    213.         if (piece[k]==KING) r = 1;
    214.         piece[from] = piece[dest]; piece[dest] = t;
    215.     }
    216.     return r;
    217. }
    218.  
    219. void Gen_push(short from, short dest)
    220. {
    221.     if (!KingFace(from, dest)) {
    222.         gen_dat[gen_end[ply]].m.from = from;
    223.         gen_dat[gen_end[ply]].m.dest = dest;
    224.         gen_end[ply]++;
    225.     }
    226. }
    227.  
    228.  
    229. void Gen(void)
    230. {
    231.     short i, j, k, n, p, x, y, t, fcannon;
    232.  
    233.     gen_end[ply] = gen_begin[ply];
    234.  
    235.     for(i=0; i < BOARD_SIZE; i++)
    236.         if (color[i]==side) {
    237.             p = piece[i];
    238.             for(j=0; j<8; j++) {
    239.                 if (!offset[p][j]) break;
    240.                 x = mailbox90[i]; fcannon = 0;
    241.                 if (p==ROOK || p==CANNON) n = 9; else n = 1;
    242.                 for (k=0; k<n; k++) {
    243.                     if (p==PAWN && side==LIGHT) x -= offset[p][j]; else x += offset[p][j];
    244.  
    245.                     y = mailbox182[x];
    246.                     if (side == DARK) t = y; else t = 89-y;
    247.                     if (y==-1 || (legalposition[t] & maskpiece[p])==0) break;
    248.                     if (!fcannon) {
    249.                         if (color[y]!=side)
    250.                             switch (p) {
    251.                             case KNIGHT: if (color[i+knightcheck[j]]==EMPTY) Gen_push(i, y); break;
    252.                             case ELEPHAN:if (color[i+elephancheck[j]]==EMPTY) Gen_push(i, y); break;
    253.                             case CANNON: if (color[y]==EMPTY) Gen_push(i, y); break;
    254.                             default: Gen_push(i, y);
    255.                             }
    256.                         if (color[y]!=EMPTY) { if (p==CANNON) fcannon++; else break; }
    257.                     }
    258.                     else {  /* CANNON switch */
    259.                         if (color[y] != EMPTY) {
    260.                             if (color[y]==xside) Gen_push(i, y);
    261.                             break;
    262.                         }
    263.                     }
    264.                 } /* for k */
    265.             } /* for j */
    266.     }
    267.  
    268.     gen_end[ply+1] = gen_end[ply]; gen_begin[ply+1] = gen_end[ply];
    269.     brandtotal += gen_end[ply] - gen_begin[ply]; gencount++;
    270. }
    271.  
    272.  
    273. /***** MOVE *****/
    274. short MakeMove(move m)
    275. {
    276.     short from, dest, p;
    277.     nodecount++;
    278.     from = m.from; dest = m.dest;
    279.     hist_dat[hdp].m = m; hist_dat[hdp].capture = p = piece[dest];
    280.     piece[dest] = piece[from]; piece[from] = EMPTY;
    281.     color[dest] = color[from]; color[from] = EMPTY;
    282.     hdp++; ply++; side = xside; xside = 1-xside;
    283.     return p == KING;
    284. }
    285.  
    286.  
    287. void UnMakeMove(void)
    288. {
    289.     short from, dest;
    290.     hdp--; ply--; side = xside; xside = 1-xside;
    291.     from = hist_dat[hdp].m.from; dest = hist_dat[hdp].m.dest;
    292.     piece[from] = piece[dest]; color[from] = color[dest];
    293.     piece[dest] = hist_dat[hdp].capture;
    294.     if (piece[dest] == EMPTY) color[dest] = EMPTY; else color[dest] = xside;
    295. }
    296.  
    297.  
    298. short UpdateNewMove(void)
    299. {
    300.     short from, dest, p;
    301.     from = newmove.from; dest = newmove.dest; p = piece[dest];
    302.     piece[dest] = piece[from]; piece[from] = EMPTY;
    303.     color[dest] = color[from]; color[from] = EMPTY;
    304.     DrawCell(from, NORMAL); DrawCell(dest, NORMAL);
    305.     return p == KING;
    306. }
    307.  
    308.  
    309. /***** EVALUATE *****/
    310. short Eval(void)
    311. {
    312.     static short piecevalue[7] = {10, 20, 20, 40, 45, 90, 1000};
    313.     short   i, s = 0;
    314.     for (i=0; i<BOARD_SIZE; i++)
    315.         if (color[i]==side) s += piecevalue[piece[i]];
    316.         else if (color[i]==xside) s -= piecevalue[piece[i]];
    317.     return s;
    318. }
    319.  
    320.  
    321. /***** SEARCH *****/
    322. /* Search game tree by alpha-beta algorith */
    323. short AlphaBeta(short alpha, short beta, short depth)
    324. {
    325.     short i, value, best;
    326.  
    327.     if (!depth) return Eval();
    328.  
    329.     Gen();
    330.     best = -INFINITY;
    331.  
    332.     for (i=gen_begin[ply]; i<gen_end[ply] && best<beta; i++) {
    333.         if (best > alpha) alpha = best;
    334.  
    335.         if (MakeMove(gen_dat[i].m)) value = 1000-ply;
    336.         else value = -AlphaBeta(-beta, -alpha, depth-1);
    337.         UnMakeMove();
    338.  
    339.         if (value > best) {
    340.             best = value; if (!ply) newmove = gen_dat[i].m;
    341.         }
    342.     }
    343.  
    344.     return best;
    345. }
    346.  
    347.  
    348. /***** THINK *****/
    349. /* Call AlphaBeta short && display some information */
    350. void ComputerThink(void)
    351. {
    352.     short best;
    353.     tickstart = *systicks; nodecount = 0;
    354.     best = AlphaBeta(-INFINITY, INFINITY, MAX_PLY);
    355.     /* Display some information */
    356.     tickend = *systicks; textcolor(7);
    357.     gotoxy(50, 4); printf("Depth            : %d", MAX_PLY);
    358.     gotoxy(50, 5); printf("Node total       : %ld ", nodecount);
    359.     gotoxy(50, 6); printf("Brand factor     : %.2f ", (float)brandtotal/gencount);
    360.     gotoxy(50, 7); printf("Time (second)    : %.2f ", (tickend-tickstart)/18.23);
    361.     gotoxy(50, 8); printf("Nodes per second : %ld ", (long)(nodecount*18.23/(tickend-tickstart+1)));
    362.     gotoxy(50, 9); printf("Score            : %d ", best);
    363.     gotoxy(50,11); printf("Computer move    : %c%d%c%d ", (char)(newmove.from%SIZE_X+65), (short)(SIZE_X-newmove.from/SIZE_X),
    364.                                                 (char)(newmove.dest%SIZE_X+65), (short)(SIZE_X-newmove.dest/SIZE_X));
    365. }
    366.  
    367.  
    368. /***** MAIN BLOCK *****/
    369.  main(void)
    370. {
    371.     InitGen(); DrawBoard(); side = DARK; xside = LIGHT; computerside = DARK;
    372.  
    373.     do {
    374.         if (side == computerside) ComputerThink();
    375.         else if (GetHumanMove()) break;
    376.         side = xside; xside = 1-xside;
    377.     } while (!UpdateNewMove());
    378. }

    Khi biên dịch trong code::block báo lỗi:
    Code:
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C||In function `void MoveTo(short int, short int)':|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|62|error: `gotoxy' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C||In function `void DrawCell(short int, short int)':|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|70|error: `textcolor' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|71|error: `textcolor' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|71|error: `textcolor' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|72|error: `textbackground' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|72|error: `textbackground' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|74|error: `cprintf' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C||In function `void DrawBoard()':|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|81|error: `textcolor' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|81|error: `textbackground' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|81|error: `clrscr' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|81|error: `gotoxy' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|103|error: `cprintf' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C||In function `void ComputerThink()':|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|373|error: `textcolor' was not declared in this scope|
    C:\Documents and Settings\Nguyen Thanh Nam\Desktop\vscc\VSCCP10.C|374|error: `gotoxy' was not declared in this scope|
    ||=== Build finished: 14 errors, 0 warnings ===|
    Trông có vẻ như là nó báo ko có mấy cái hàm gotoxy rùi textcolour thì phải ??? hixxx nghe nói cái code::block hay lắm mà sao lại ko có mấy hàm đó??? chắc tại mình ko bít dùng quá!!!
    Các bạn xem giúp với!!!
    Đã được chỉnh sửa lần cuối bởi lethanh : 28-04-2009 lúc 08:00 PM.
    NO

  2. #2
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Mấy cái textcolor với goto hình như là của graphics.h, cái thư viện này chỉ sử dụng được trong mấy cái IDE Dos 16 bit như TC, BC thôi, ko dùng được trong các IDE 32bit như VC hay code block đâu
    Cánh Chym ứ mỏi

  3. #3
    Ngày gia nhập
    04 2008
    Bài viết
    336

    mấy hàm đó nằm trong conio.h, ko thuộc chuẩn chung mà là của riêng Borland nên ko portable được cậu xài compiler Borland 5.5 mà biên dịch.

    hoặc tự viết lại các hàm đó, tham khảo thêm ở đây.
    http://forums.congdongcviet.com/showthread.php?t=11908

    p/s: cờ tướng đấu giữa phe Ánh sáng và Bóng tối, nghe oách quá
    code ra gió bão

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    22

    Hix vậy là giờ phải code lại cái conio.h và graphics.h hả :-s. Bro nào có rùi shared mình với!!! Thanks
    NO

Các đề tài tương tự

  1. Bị cắn gần đứt lưỡi vì giở trò đồi bại
    Gửi bởi quynhcute trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 20-09-2012, 06:10 PM
  2. Trò chơi ô chữ
    Gửi bởi hieuiph trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 28-09-2009, 10:08 PM
  3. Lập trình trò chơi đoán chữ Tiêng Việt(như trò chơi chiếc nón kỳ diệu trên VTV3)
    Gửi bởi friends_forever_5_11 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 7
    Bài viết cuối: 19-12-2008, 12:22 AM
  4. Bài tập C++, trò trơi tập thể!
    Gửi bởi embuonviemdethuong trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 06-02-2007, 08:46 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn