기금넷 공식사이트 - 복권 조회 - C 언어 바둑
C 언어 바둑
/* ALEX_LEE 바둑 c 언어 애플릿 */
/* o(∩_∩)o ... c 언어를 복습하는 데 사용할 수 있는 애플릿 */
/* 내 블로그: hi.baidu.com/alexlee321*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# include & ltstdio.h & gt
# include & ltbios.h & gt
# include & ltctype.h & gt
# include & ltconio.h & gt
# include & ltdos.h & gt
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* 기호 상수 정의 */
/* 바둑판을 그리는 데 필요한 탭 정의 */
#define CROSSRU 0xbf /* 오른쪽 위 모서리 */
#define CROSSLU 0xda /* 왼쪽 위 모서리 */
# 교차 0xc0 /* 왼쪽 아래 구석 정의 */
#define CROSSRD 0xd9 /* 오른쪽 아래 */
# 교차 0xc3 /* left */
#define CROSSR 0xb4 /* Right */
#define CROSSU 0xc2 /* Above */
# 아래 cross d 0xc 1/*/
# 교차 정의 0xc5 /* 교차 */
/* 화면에서 체스판의 왼쪽 위 모서리 위치 정의 */
# MAPXOFT 5 정의
# MAPYOFT 2 정의
/* 플레이어 1 에 대한 운영 키 정의 */
# defineplay1up0x1157/* 위로 -'w' */
# defineplay1down0x1f53/* 아래로 -'s' */
# defineplay1left0x1E41/* 왼쪽으로 이동 -'a' */
# defineplay1right 0x2044/* move right-'d' */
# defineplay1do 0x3920/* move-spacebar */
/* 플레이어 2 의 작동 키 코드 정의 */
#define PLAY2UP 0x4800/* 위로 화살표 키 위로 */
#define PLAY2DOWN 0x5000/* 아래로 이동-화살표 키 down*/
#define PLAY2LEFT 0x4b00/* 왼쪽 화살표 left*/
#define PLAY2RIGHT 0x4d00/* 오른쪽으로 이동-화살표 키 오른쪽 */
# defineplay2 do 0x1c0d/* move-enter */
/* 게임 중간에 나가시려면 Esc */
# 이스케이프 0x0 1 1b 정의
/* 체스판의 교차 상태를 정의합니다. 즉, 해당 점에 체스말이 있는지 여부 */
/* 만약 바둑말이 있다면, 너도 어느 플레이어의 바둑인지 지적할 수 있을 거야 */
#define CHESSNULL 0 // 체스 조각 없음.
# define ches 1' O '// 1 번 플레이어의 체스 조각
# 바둑돌 2 'X'// 선수 2 를 정의하는 바둑돌
/* 키 범주 정의 */
#define 키 EXIT 0/* exit 키 */
# definekeyfallches1/* dropkey */
#define KEYMOVECURSOR 2/* 커서 키 */
#define KEYINVALID 3/* 잘못된 키 */
/* 기호 상수 정의: true, false-true 는 1, false 는 0 */
# 참 정의 1
# false 0 정의
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* 데이터 구조 정의 */
/* 검사기 교차 좌표의 데이터 구조 */
구조점
{
Int x, y;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* 사용자 정의 함수 프로토타입에 대한 설명 */
Voidinit (void);
Intgetkey (void);
Intcheck key (intpress);
Intchange order (void);
Int ChessGo(int Order, struct point cursor);
Void do error (void);
Void DoOK (유효하지 않음);
Void do win (intorder) :
Void MoveCursor(int Order, int press) :
Void DrawCross(int x, int y) :
Void drawmap (void);
Int JudgeWin(int Order, struct point cursor);
Int JudgeWinLine(int Order, struct point 커서, int direction);
Void showordermsg (intorder);
Void 혼란 (void);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* 글로벌 변수 정의 */
Int gPlayOrder/* 는 현재 기사 */
구조점 gCursor/* 체스판 위의 커서 위치 */
Char gchessboard [19] [19]; /* 체스판의 각 점 상태를 기록하는 데 사용됩니다 */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* 주 함수 */
Void main ()
{
Int press
Int bOutWhile = FALSE/* 종료 루프 플래그 */
Init (); /* 초기화 이미지, 데이터 */
While( 1)
{
Press = getkey (); /* 사용자의 키 값 가져오기 */
스위치 (CheckKey(press))/* 키 유형 결정 */
{
/* 는 종료 키 */
케이스 키 종료:
Clr SCR (); /* 화면 비우기 */
BOutWhile = TRUE
깨뜨리다
/* 는 하강 키입니다 */
Case KEYFALLCHESS:
If (chess go (gplayorder, gcursor) = = false)/* chess */
Doerror (); /* 운동 중 오류 */
기타
{
Dook (); /* 올바른 이동 */
/* 현재 기사가 이기면 */
If(JudgeWin(gPlayOrder, gCursor)==TRUE)
{
도윈 (gplayorder);
BOutWhile = TRUE/* 종료 루프 플래그가 true */
}
/* 그렇지 않으면 */
기타
/* 교환 기사 */
Changeorder ();
}
깨뜨리다
/* 는 커서 이동 키 */
Case KEYMOVECURSOR:
MoveCursor(gPlayOrder, press);
깨뜨리다
/* 는 잘못된 키입니다 */
사례 키가 잘못되었습니다.
깨뜨리다
}
If(bOutWhile==TRUE)
깨뜨리다
}
/* 게임 종료 */
Endgame ();
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* 인터페이스 초기화, 데이터 초기화 */
Void 초기화 (void)
{
Int I, j;
Char *Msg[]=
{
플레이어1키: ",
위-아래,
"돈-s" 입니다.
"왼쪽-a" 입니다.
"오른쪽 -d" 입니다.
"DO-space" 입니다.
"",
"플레이어 2 키",
"위로" 입니다.
아래로-아래로,
왼쪽-왼쪽,
오른쪽-오른쪽,
"DO-ENTER" 입니다.
"",
"게임 종료:",
"ESC",
비어 있습니다.
}
/* 첫 번째 플레이어는 플레이어 1 */
Gplayorder = ches1;
/* 보드 데이터가 0 입니다. 즉, 보드의 각 점 시작 부분에 조각이 없습니다. */
For(I = 0;; 나< 19; I++)
For(j = 0;; J< 19; J++)
Gchessboard [I] [j] = chessnull;
/* 초기 커서 위치 */
Gcursor.x = gcursor.y = 0;
/* 바둑판 그리기 */
Textmode (C40);
Drawmap ();
/* 작업 키 설명 표시 */
I = 0;;
Textcolor (갈색);
While(Msg[i]! = 비어 있음)
{
Gotoxy (25,3+I);
Cpu ts (msg [I]);
I++;+;
}
/* 현재 기사 표시 */
Showordermsg (gplayorder);
/* 보드 왼쪽 위 구석으로 커서를 이동합니다 */
Gotoxy(gCursor.x+MAPXOFT, gcursor.y+mapyoft);
}
/* 바둑판 그리기 */
Void 지도 그리기 (void)
{
Int I, j;
Clr SCR ();
For(I = 0;; 나< 19; I++)
For(j = 0;; J< 19; J++)
드류 크로스 (I, j);
}
/* 체스판에 교차점을 그립니다 */
Void DrawCross(int x, int y)
{
Gotoxy(x+MAPXOFT, y+mapyoft);
/* 교차는 1 호 플레이어의 체스말 */
If (gchessboard [x] [y] = = chess1)
{
Textcolor (연한 파란색);
Putch (ches1);
반환;
}
/* 교차점은 참가자 2 의 체스입니다 */
If(gChessBoard[x][y]==CHESS2)
{
Textcolor (연한 파란색);
Putch (chess2);
반환;
}
텍스트 색상 (녹색);
/* 왼쪽 위 구석의 교차점 */
If(x = = 0 & amp;; & ampy==0)
{
풋치 (크로스루);
반환;
}
/* 왼쪽 아래 구석의 교차점 */
If(x = = 0 & amp;; & ampy== 18)
{
Putch (크로스 LD);
반환;
}
/* 오른쪽 위 교차점 */
If (x = =18 & & ampy==0)
{
퍼치 (크로스루);
반환;
}
/* 오른쪽 아래 교차점 */
If (x = =18 & & ampy== 18)
{
Putch (crossrd);
반환;
}
/* 왼쪽 경계 교차점 */
(x==0) 인 경우
{
Putch (크로스 l);
반환;
}
/* 오른쪽 경계 교차점 */
다음 경우 (x== 18)
{
Putch (crossr);
반환;
}
/* 위쪽 경계 교차점 */
(y==0) 인 경우
{
Putch (crossu);
반환;
}
/* 하한 경계 교차점 */
If(y== 18)
{
Putch (crossd);
반환;
}
/* 검사기 중간의 교차점 */
푸치 (십자가);
}
/* 교환 기사 */
Int ChangeOrder(void)
{
If(gPlayOrder = = ches 1)
GPlayOrder = CHESS2
기타
Gplayorder = ches1;
리턴 (gplayorder);
}
/* 키 가져오기 */
Int GetKey(void)
{
Char lowbyte
Int press
While (bioskey( 1) == 0)
을 눌러 섹션을 인쇄할 수도 있습니다 /* 사용자가 키를 누르지 않으면 루프가 비어 있습니다 */
= bioskey (0) 를 누릅니다.
낮은 바이트 = & amp0xff 누르기
뉴스 = 뉴스 & amp0xff00+toupper (lowbyte);
반환 (누르기);
}
/* 오류 처리 */
Void 오류 (void)
{
소리 (1200);
지연 (50);
Nosound ();
}
/* 바둑 처리 */
Void DoWin (정수 순서)
{
소리 (1500); 지연 (100);
소리 (0); 지연 (50);
소리 (800); 지연 (100);
소리 (0); 지연 (50);
소리 (1500); 지연 (100);
소리 (0); 지연 (50);
소리 (800); 지연 (100);
소리 (0); 지연 (50);
Nosound ();
Textcolor (빨간색+깜박임);
고톡시 (25, 20);
If(Order = = ches 1)
Cputs ("플레이어1승리!" " );
기타
CPUTS ("플레이어 2 가 이겼다!" " );
Gotoxy (25,21);
Cputs(" \ \<;; +> /");
Getch ();
}
/* 바둑 */
Int ChessGo(int Order, 구조 포인터 커서)
{
/* 교차에 바둑말이 있는지 판단한다 */
If (gchessboard [cursor.x] [cursor.y] = = chessnull)
{
/* 바둑말이 없으면 움직일 수 있다 */
Gotoxy(Cursor.x+MAPXOFT, cursor.y+mapyoft);
Textcolor (연한 파란색);
Putch (주문);
Gotoxy(Cursor.x+MAPXOFT, cursor.y+mapyoft);
Gchessboard [cursor.x] [cursor.y] = order;
TRUE 를 반환합니다
}
기타
FALSE 를 반환합니다
}
/* 다음 바둑 후 현재 바둑 선수가 이길지 판단한다 */
Int JudgeWin(int Order, struct point 커서)
{
Int I;;
For(I = 0;; 나<4; I++)
/* 지정된 방향에 5 개의 연속 체스말이 있는지 확인 */
If(JudgeWinLine(Order, Cursor, I))
TRUE 를 반환합니다
FALSE 를 반환합니다
}
/* 지정된 방향에 5 개의 연속 체스말이 있는지 확인 */
Int 판단선 (int 순서, 구조점 커서, int 방향)
{
Int I;;
구조물 점 위치;
Constinttestnum = 5;
Int 개수
스위치 (방향)
{
상황 0:/* 수평 방향 */
Pos.x = cursor.x-(testnum-1);
Pos.y = cursor.y;
Dpos.x =1;
Dpos.y = 0;
깨뜨리다
시나리오 1:/* 수직 방향 */
Pos.x = cursor.x;
Pos.y = cursor.y-(testnum-1);
Dpos.x = 0;
Dpos.y =1;
깨뜨리다
시나리오 2:/* 왼쪽에서 오른쪽으로 기울어진 방향 */
Pos.x = cursor.x-(testnum-1);
Pos.y = cursor.y+(testnum-1);
Dpos.x =1;
Dpos.y =-1;
깨뜨리다
사례 3:/* 왼쪽 위에서 오른쪽 아래까지의 기울기 방향 */
Pos.x = cursor.x-(testnum-1);
Pos.y = cursor.y-(testnum-1);
Dpos.x =1;
Dpos.y =1;
깨뜨리다
}
Count = 0;;
For(I = 0;; 나 & lttestnum * 2+1; I++)
{
(위치> = 0& & amppos.x & lt =18) 인 경우. & amppos.y & gt= 0 & amp& amp 위치<= 18)
{
If(gChessBoard[ 위치 x][ 위치 y]= = 순서)
{
Count++;+;
If(count & gt;; =testnum)
TRUE 를 반환합니다
}
기타
Count = 0;;
}
Pos.x+= dpos.x;
Pos.y+= dpos.y;
}
FALSE 를 반환합니다
}
/* 커서 이동 */
Void MoveCursor(int Order, int press)
{
스위치 (누르기)
{
사례 연구 1 이상:
If (order = = ches1& & ampgCursor.y & gt0)
Gcursor.y-;
깨뜨리다
사례 연구 1 다운로드:
If (order = = ches1& & ampgCursor.y & lt 18)
Gcursor.y++;
깨뜨리다
사례 연구 1 왼쪽:
If (order = = ches1& & ampgCursor.x & gt0)
Gcursor.x-;
깨뜨리다
사례 연구 1 오른쪽:
If (order = = ches1& & ampgCursor.x & lt 18)
Gcursor.x++;
깨뜨리다
사례 프레젠테이션 2:
If (order = = chess2 & & ampgCursor.y & gt0)
Gcursor.y-;
깨뜨리다
사례 재생 2 다운로드:
If (order = = chess2 & & ampgCursor.y & lt 18)
Gcursor.y++;
깨뜨리다
사례 연구 2 왼쪽:
If (order = = chess2 & & ampgCursor.x & gt0)
Gcursor.x-;
깨뜨리다
사례 연구 2 정확함:
If (order = = chess2 & & ampgCursor.x & lt 18)
Gcursor.x++;
깨뜨리다
}
Gotoxy(gCursor.x+MAPXOFT, gcursor.y+mapyoft);
}
/* 게임 종료 처리 */
Void 잔여물 (void)
{
Textmode (c80);
}
/* 현재 기사 표시 */
Void ShowOrderMsg(int Order)
{
Gotoxy(6, mapyoft+20);
Textcolor (밝은 빨간색);
If(Order = = ches 1)
Cputs ("플레이어1go!" " );
기타
Cputs("Player2 go! "" );
Gotoxy(gCursor.x+MAPXOFT, gcursor.y+mapyoft);
}
/* 올바르게 작동하는 코어 */
Void DoOK (유효하지 않음)
{
소리 (500);
지연 (70);
소리 (600);
지연 (50);
소리 (1000);
지연 (100);
Nosound ();
}
/* 사용자의 키 범주 확인 */
Int CheckKey(int press)
{
If (= = ESC 키를 누름)
Enter exit;; /* 는 종료 키 */
기타
만약
((press = = play1do & & ampgplayorder = = ches1) | |
(press = = play2do & amp & ampgplayorder = = chess2)
) 을 참조하십시오
반환 키 fallchess/* 는 드롭 키 */
기타
만약
(press = = play1up | | press = = play1down | |
Press==PLAY 1LEFT ||
Press = = play2up | | press = = play2down | |
Press = = play 2 왼쪽 | | press = = play 2 오른쪽
) 을 참조하십시오
반환 KEYMOVECURSOR/* 는 커서 이동 키 */
기타
Return 키가 잘못되었습니다. /* 잘못된 키 */
}