본문 바로가기

PROFILE/Independent project

O Mok - Puzzle game / Dos console based / C, AI, array, Event query/ March. 2008




--- 90 Lines Version without AI ----
#include <iostream>

#include <windows.h>


using namespace std;


char board[19*2][19] ={0},who[3][3]={"","흑","백"},stone[3][3]={"","○","●"};

int turn=1,memory[1000]=0,*pMemory=&memory[0],gibo=0,*pGibo=&gibo;

HANDLE hin=GetStdHandle(STD_INPUT_HANDLE), hout=GetStdHandle(STD_OUTPUT_HANDLE);


void Insert(int x, int y);

void Pop();

void Map();

void Gotoxy(int x, int y);

void Click();

void Check(int x, int y);


void main(){

Map();

while(1)

Click();

}

void Insert(int x, int y){

pMemory[*pGibo]=x;

pMemory[*pGibo+1]=y;

*pGibo=*pGibo+2;

}

void Pop(){

if(*pGibo>0){

Gotoxy(pMemory[*pGibo-2],pMemory[*pGibo-1]);

puts("╋");

board[pMemory[*pGibo-2]][pMemory[*pGibo-1]]=0;

*pGibo=*pGibo-2;

}

}

void Map(){

char view[19][19*2+1]={

"┏┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┓",

"┣╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋┫",

"┗┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┛"};

cout << view[0] <<endl;

for(int i=0;i<17;i++)

cout << view[1] << endl;

cout << view[2] << endl;

}

void Gotoxy(int x, int y){

COORD XY = x,y;

SetConsoleCursorPosition(hout, XY);

}

void Click(){

DWORD dw;

INPUT_RECORD rrec;

SetConsoleMode(hin,ENABLE_MOUSE_INPUT);

ReadConsoleInput(hin,&rrec,1,&dw);

switch(rrec.EventType)

case MOUSE_EVENT:

if(rrec.Event.MouseEvent.dwButtonState == FROM_LEFT_2ND_BUTTON_PRESSED)

Pop();

if(rrec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)

if(rrec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK){

int x = rrec.Event.MouseEvent.dwMousePosition.X;

if(x%2==1)

x=x-1;

int y = rrec.Event.MouseEvent.dwMousePosition.Y;

if(board[x][y]==0){

Gotoxy(x,y);

puts(stone[turn]);

board[x][y]=turn;

Insert(x,y);

Check(x,y);

turn++;

if(turn==3)

turn=1;

}

}

}

void Check(int x, int y){

int rawx=x,rawy=y,count=0;

while(board[x-2][rawx]==turn)x=x-2;

while(board[x+2][rawy]==turn){y=y+2;count++};

while(board[rawx][y]==turn)y=y-1;

while(board[rawx][y+1]==turn){y=y+1;count++};

if(count==5){

Gotoxy(4,20);

cout << who[turn] << "이 승리" << endl;

exit(0);

}

if(count==3||count==4){

Gotoxy(4,20);

cout << rawx <<","<<rawy<<"좌표가 위험"<<endl;

}

}