C 언어 2 인 오목 게임 실현
기능 을 실현 하 다
바둑판 유저 1 과 유저 2 대 전 을 생 성 합 니 다.어느 유저 가 먼저 연속 5 자 연결선 이 있 고 어느 유저 가 이 깁 니까?
어떻게 실현 합 니까?
구성:
2 차원 배열:board[ROW][COL],ROW*COL 의 바둑판 을 정의 합 니 다.
주요 논리:
바둑판 보이 기
1.바둑판 을 보 여 주 는 것 은 간단 합 니 다.천천히 바둑판 을 모 으 면 됩 니 다.
2.사용 자 는 두 가지 조건 에 주의 하 세 요.바둑 알 은 바둑판 에 있 고 다음 위 치 는 점용 되 지 않 습 니 다.
3.판단 이 가장 어렵다.
방법:하위 위치의 8 개 방향(위,아래,왼쪽,오른쪽,위,오른쪽,아래,왼쪽 위,왼쪽 아래)에서 같은 바둑 알 의 수 를 계산 한 다음 에 대각 의 바둑 알 수 를 더 하면 5 는 5 자 연결선 이 있다 는 것 을 설명 한다.
주요 함수 중 세 가지 주요 실현 함수 사용:
Showboard(board, ROW, COL);//
Playermove(board, ROW, COL, cur);// ,cur
Judge(board, ROW, COL);// 5
Getcount(board[][COL], row, col, dir)// dir
코드헤더 파일
#ifndef __FIVECHREE_H__
#define __FIVECHEE_H__
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
#define ROW 10//
#define COL 10//
#define INIT '*'//
#define PLAYER1 1
#define PLAYER2 2
#define NEXT 3//
#define DRAW 4//
//8
#define UP 10
#define RIGHT_UP 11
#define RIGHT 12
#define RIGHT_DOWN 13
#define DOWN 14
#define LEFT_DOWN 15
#define LEFT 16
#define LEFT_UP 17
extern void Menu();
extern void Game();
#endif
주 함수 원본 파일
#include"fivechree.h"
int main(){
int quit = 0;
while (!quit){
Menu();
int select = 0;
scanf("%d", &select);
switch (select){
case 1:
Game();
break;
case 2:
quit = 1;
break;
default:
printf("Enter Error!
");
break;
}
}
printf("Byebye
");
system("pause");
return 0;
}
함수 정의 원본 파일
#include"fivechree.h"
static int x = 0;
static int y = 0;
void Menu(){
printf("+---------------------+
");
printf("+- 1.Play 2.Exit -+
");
printf("+---------------------+
");
printf("Please Enter Your Select#");
}
static void Showboard(int board[][COL], int row, int col){// o 1 ,x 2
system("cls");
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
switch (board[i][j]){
case PLAYER1:
board[i][j] = 'o';
break;
case PLAYER2:
board[i][j] = 'x';
break;
case 0:
board[i][j] = INIT;
break;
default:
break;
}
}
}
printf(" ");
for (int i =1; i <= row; i++){
printf("%2d ", i);
}
printf("
");
for (int i = 1; i <= row; i++){
printf("%-2d", i);
for (int j = 1; j <= col; j++){
printf(" %c ", board[i - 1][j - 1]);
}
printf("
");
}
}
static void Playermove(int board[][COL], int row, int col, int who){// ,who
while (1){
printf("Please Enter PLAYER%d Postion<x,y>#", who);
scanf("%d %d", &x, &y);
if (x<1 || x>row || y<1 || y>col){ //
printf("Postion is error!
");
continue;
}
if (board[x - 1][y - 1] == INIT){//
board[x - 1][y - 1] = who;
break;
}
printf("Postion is not empty
");
}
}
static int Getcount(int board[][COL], int row, int col, int dir){// 8
int _x = x;//_x,_y , x,y
int _y = y;
int count = 0;
while (1){
switch (dir){
case UP:
_x--;
break;
case DOWN:
_x++;
break;
case LEFT:
_y--;
break;
case RIGHT:
_y++;
break;
case RIGHT_UP:
_x--, _y++;
break;
case RIGHT_DOWN:
_x++, _y++;
break;
case LEFT_DOWN:
_x++, _y--;
break;
case LEFT_UP:
_x--, _y--;
break;
default:
break;
}
if (_x>=1 || _x<=row || _y>=1 || _y<=col){//
if (board[x-1][y-1] == board[_x-1][_y-1]){
//printf("yes
");
count++;
}
else{
//printf("no
");
break;
}
}
else{
return count;
}
}
return count;
}
// : 8 ( , , , , , , , )
// , , 5 5
static int Judge(int board[][COL], int row, int col){
int count1 = Getcount(board, row, col, UP)\
+ Getcount(board, row, col, DOWN);
//printf("%d
", count1);
if (count1 >= 4){
return board[x-1][y-1];
}
count1 = Getcount(board, row, col, RIGHT_UP)\
+ Getcount(board, row, col, LEFT_DOWN);
//printf("%d
", count1);
if (count1 >= 4){
return board[x-1][y-1];
}
count1 = Getcount(board, row, col, RIGHT)\
+ Getcount(board, row, col, LEFT);
//printf("%d
", count1);
if (count1 >= 4){
return board[x-1][y-1];
}
count1 = Getcount(board, row, col, RIGHT_DOWN)\
+ Getcount(board, row, col, LEFT_UP);
if (count1 >= 4){
return board[x-1][y-1];
}
for (int i = 0; i < row; i++){//
for (int j = 0; j < col; j++){
if (board[i][j] == INIT){
return NEXT;
}
}
}
return DRAW;
}
void Game(){
int board[ROW][COL] = { 0 };
//memset(board, INIT, ROW*COL);
int result = 0;
int cur = PLAYER1;
Showboard(board, ROW, COL);//
while (1){
//Showboard(board, ROW, COL);
Playermove(board, ROW, COL, cur);
Showboard(board, ROW, COL);// board ,
result = Judge(board, ROW, COL);
if (result != NEXT){
break;
}
cur = (cur == PLAYER1 ? PLAYER2 : PLAYER1);// , PLAYER1 ? PLAYER2 : PLAYER1
}
Showboard(board, ROW, COL);
switch (result){
case 'o':
printf("Player1 Win!
");
break;
case 'x':
printf("Player2 Win!
");
break;
case DRAW:
printf("Tie Game!
");
break;
default:
//printf("%c
", result);
printf("BUG
");
break;
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.