2008年4月21日星期一

低能的井字過三關

為甚麼說低能呢?
其實我並不是說井字過三關是低能
而是我寫了一個低能的井字過三關游戲
因為我寫得確實是超低能,但兩個人是可以玩的

代碼如下:
………………………………
$ cat test.cpp 
/* test.cpp
* just for trying how to use cpp
*/

#include
using std::cout;
using std::cin;
using std::endl;

class TTT
{ /* this just a trying, test how to use class */
public:
/* all functions are here */
void initGame(void)
{ /* initial the array game */
int i, j;
for (i=0;i<3;i++) {
for (j=0;j<3;j++) {
game[i][j] = '+';
}
}
}

void PrintGame(void)
{
/* print out the table of the game */
int i, j;

cout << "========================================" << endl;
for (i=0;i<3;i++) {
for (j=0;j<3;j++) {
cout << game[i][j];
}
cout << endl;
}
}

void Replace(int i, int j, char T)
{
game[i][j] = T;
}

void hello(void)
{
/* hello word function */
Ten = 10;
cout << "Hello~" << endl;
cout << "Ten is: " << Ten << endl;
}

int Win(char Tag)
{
/* check a winner */
if ((game[0][0] == Tag && game[0][1] == Tag && game[0][2] == Tag) ||
(game[1][0] == Tag && game[1][1] == Tag && game[1][2] == Tag) ||
(game[2][0] == Tag && game[2][1] == Tag && game[2][2] == Tag) ||
(game[0][0] == Tag && game[1][0] == Tag && game[2][0] == Tag) ||
(game[0][1] == Tag && game[1][1] == Tag && game[2][1] == Tag) ||
(game[0][2] == Tag && game[1][2] == Tag && game[2][2] == Tag) ||
(game[0][0] == Tag && game[1][1] == Tag && game[2][2] == Tag) ||
(game[0][2] == Tag && game[1][1] == Tag && game[2][0] == Tag)) {
cout << "The Winner is:" << Tag << endl;
return 0;
}
return 1;
}

int CanPut(int i, int j)
{
/* check the place can put a cross or circle */
if (i >= 0 && i <= 2 && j >= 0 && j <= 2) {
if (game[i][j] == '+') {
return 1;
}
}

return 0;
}

private:
char game[3][3]; /* save the cross or circle of the game */
int Ten;
};

int main(void)
{
/* main function */
int i, j;
char Tag = 'O';

TTT trying;
trying.initGame();
trying.PrintGame();

while (trying.Win('O') && trying.Win('X')) {
cin >> i >> j;
if (trying.CanPut(--i, --j)) {
trying.Replace(i, j, Tag);
trying.PrintGame();
if (Tag == 'O')
Tag = 'X';
else if (Tag == 'X')
Tag = 'O';
}
}

return 0;
}

$ cat Makefile
CC = g++
test:test.cpp

$ ./test
========================================
+++
+++
+++
1 1
========================================
O++
+++
+++
2 3
========================================
O++
++X
+++
2 1
========================================
O++
O+X
+++
2 2
========================================
O++
OXX
+++
3
1
========================================
O++
OXX
O++
The Winner is:O

我連Makefile都寫了,compile只需要$make
雖然那個Makefile只有一句囧
對於C/C++ Makefile真是非常實用~
所以只有一句我都寫了


這本來是year2的練習
不過因為太簡單了,所以我也做了
因為year2是在教C++ & Java
所以我就用C++寫
用上了面向對像的方法
把Data Structure和Algorithm綁在一起,能避開Pointer的使用
Programmer不需要理會Pointer
這就是我所能體會的好處

但如果我對於Pointer的使用很有信心,其實我不需要用上面向對像的方法
所以目前為止我還是喜歡用C
因為Pointer明顯更靈活~
發佈留言

熱門文章