C 언어 로 오목 게임 을 하 겠 습 니 다.
1.main.c
기조 함수 에서 먼저 사용자 에 게 선택 할 수 있 는 인 터 페 이 스 를 제공 해 야 합 니 다.여기 서 우 리 는 1 을 선택 하면 게임 을 시작 하고 2 를 선택 하면 게임 을 종료 합 니 다.코드 는 다음 과 같 습 니 다.
#include "gobang.h"
void Mean(){
printf("-----------------------
");
printf(" 1.play 2.drop up
");
printf("-----------------------
");
}
int main(){
int seclet = 0;
int c = 0;
while (!c){
Mean();
printf("Please choose number:
");
scanf("%d", &seclet);
switch (seclet){
case 1:
Game();
break;
case 2:
c = 1;
break;
default:
printf("Please Enter Once:
");
break;
}
}
printf("Byebye~
");
system("pause");
return 0;
}
함수 실행 이 시작 되면 디 스 플레이 상자 에 숫자 입력 을 알려 줍 니 다.1 은 게임 에 들 어가 기 위해 Game()함 수 를 호출 합 니 다.2.게임 을 종료 하기 위해 서 입 니 다.그 중에서 while 순환 의 역할 은 사용자 가 인터페이스 에 들 어가 서 오류(0 또는 1 이 아 닌)를 입력 하거나 게임 을 한 번 완성 한 후에 옵션 을 계속 팝 업 하 는 것 입 니 다.0 을 입력 해 야 num 을 0 으로 설정 하고 순환 을 종료 합 니 다.2.gobang.h
함수 의 헤더 파일 은 매크로 정의 와 함수 의 성명 을 포함 하고 코드 는 다음 과 같 습 니 다.
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#define ROW 10//
#define COL 10//
#define PLAYER1 1// 1 1
#define PLAYER2 2// 2 2
#define NEXT 3//NEXT
#define DRAW 4//DRAW
#define U 10//
#define RU 11//
#define R 12//
#define RD 13//
#define D 14//
#define LD 15//
#define L 16//
#define LU 17//
extern void Game();//
3.gobang.c오목 의 주요 논 리 는 먼저 바둑판 을 인쇄 한 다음 에 게이머 들 이 한 걸음 한 걸음 걸 어서 5 자(성공 하면 튀 어 나 오기)로 연결 되 는 지 판단 하 는 것 이다.출력 한 후의 바둑판 을 인쇄 하고 게이머 들 은 두 걸음 한 걸음 걸 어서 5 자 로 연결 되 는 지 다시 판단 한 다음 에 출력 한 후의 바둑판 을 인쇄 하 는 것 이다.
그래서 Game()함수 외 에 다음 과 같은 몇 개의 인 터 페 이 스 를 실현 해 야 합 니 다.
Print()//
Player()//
Judge//
1.Game()오목 의 주요 코드 는 모두 이 파일 에 쓰 여 있 습 니 다.test.c 에는 헤더 파일 test.h 가 포함 되 어야 합 니 다.Game()함 수 는 다른 함 수 를 호출 하여 전체 바둑 과정 을 실현 합 니 다.두 게이머 가 바둑 을 두 는 것 은 같은 조작 이기 때문에 같은 함 수 를 호출 합 니 다.들 어 오 는 게이머 의 매개 변수 만 다 르 고 변 수 를 정의 합 니 다.who 는 매번 while 순환 에 들 어 갈 때마다 who 의 값 이 한 번 변 합 니 다.상세 한 과정 은 다음 과 같은 코드 와 설명 을 볼 수 있 습 니 다.
void Game(){
int checkerboard[ROW][COL] = { 0 };//
int result = 0;//
int who = PLAYER1;// who PLAYER1
while (1){//
Print(checkerboard);//
Player(checkerboard, ROW, COL, who);//
result = Judge(checkerboard);
if (result != NEXT){// result NEXT,
break;
}
who = (who == PLAYER1 ? PLAYER2 : PLAYER1);// who
}
Print(checkerboard);//
switch (result){
case PLAYER1:// PLAYLER1,
printf("PLALYER1 win
");
break;
case PLAYER2:// PLAYER2,
printf("PLAYER2 win
");
break;
case DRAW:// DRAW,
printf("IS DRAW");
break;
}
}
2.Print()바둑판 을 인쇄 하 는 함 수 는 실현 하기 어렵 지 않 습 니 다.코드 는 다음 과 같 습 니 다.
void Print(int board[][COL]){//
//system("cls");
printf(" ");
for (int i = 0; i < ROW; i++){// 1 10
printf(" %d ", i);
}
printf("
");
for (int i = 0; i < ROW; i++){
printf("%d", i);
for (int j = 0; j < COL; j++){
if (board[i][j] == 0){
printf(" . ");//
}
else{
printf(" %d ", board[i][j]);//
}
}
printf("
");
}
}
3.Player()이 함 수 는 board[x][y]에 x,y 좌표 에 따라 값 을 부여 하고 값 을 PLAYER 1 또는 PLAYER 2 로 부여 합 니 다.x,y 를 전역 변수 로 정의 하고 그 생명 주 기 를 연장 하 는 데 주의해 야 한다.작용 은 매번 떨 어 지 는 위 치 를 기록 하고 다섯 개의 연결 여 부 를 계산 하 는 데 편리 하 다.Player()함수 코드 는 다음 과 같 습 니 다.
int x = 0;// x
int y = 0;// y
void Player(int board[][COL],int row,int col,int c){
while (1){
printf("Please Enter x y:
");
scanf("%d%d",&x,&y);
if (x<0 || x>row - 1 || y<0 || y>col - 1){//x,y while
printf("Eorr
");
continue;
}
if (board[x][y] == 0){// ,
board[x][y] = c;// board[][] PLAYER1 PLAYER2
break;//
}
else{
printf(" ,
:");
continue;
}
}
}
4.Judge()5 자 연속 여 부 를 판단 하 는 것 은 가장 어 려 운 일이 다.여기 서 8 개 방향 으로 정 의 된 것 이 바로 사용 된다.다섯 자 를 잇 는 것 은 네 가지 상황,가로,세로,사선(두 가지 상황)일 뿐 아니 라 네 방향 바둑돌 의 수량 만 통계 해 야 한다.여기 서 왜 if()판단 의 조건 은>=4 인지 설명 한다.Calculation()함수 에서 특정한 방향의 바둑 알 수(그 8 개 방향)를 통계 할 때 현재 바둑 알 의 위 치 는 이미 알 고 있 습 니 다.만약 에 그 위 에 네 개의 바둑 알 이 있다 면 다섯 알 은 이미 연결 되 었 습 니 다.그러나 계수기 의 초기 값 은 0 이기 때문에 이때 count 의 값 은 4 이 고 함수 의 반환 값 도 4 이기 때문에 Judge()함수 에서...if()의 조건 은>=4(이때>4 의 경우 일반적으로 발생 하지 않 습 니 다)입 니 다.나머지 상세 코드 는 다음 과 같다.
int Judge(int board[][COL]){
if (Calculation(board, U) + Calculation(board, D)>=4 || \
// ,
Calculation(board, RU) + Calculation(board, LD) >= 4 || \
// ,
Calculation(board, R) + Calculation(board, L) >= 4 || \
// ,
Calculation(board, RD) + Calculation(board, LU) >= 4){
// ,
return board[x][y];
}
for (int i = 0; i < ROW; i++){// ,
for (int j = 0; j < COL; j++){
if (board[i][j] == 0){
return NEXT;
}
}
}
return DRAW;// ,
}
int Calculation(int board[][COL], int direction){//
int _x = x;//
int _y = y;//
int count = 0;//
while (1){//
switch (direction){
case U:// y ,x ,
_x--; break;
case D:
_x++; break;
case L:
_y--; break;
case R:
_y++; break;
case RU:
_x--; _y++; break;
case RD:
_x++; _y++; break;
case LD:
_x++; _y--; break;
case LU:
_x--; _y--; break;
default:
break;
}
if (_x<0 || _x>ROW - 1 || _y<0 || _y>COL - 1){// ,
break;
}
else{
if (board[x][y] == board[_x][_y]){//
count++;//
}
else{
break;// ,
}
}
}
return count;
}
우 리 는 또한 Print()함수 에 system("cls")을 추가 할 수 있 습 니 다.이 함 수 는 스크린 조작 입 니 다.게다가 한 장의 바둑판 에서 바둑 을 두 는 것 입 니 다.또한 바둑 알 을 출력 하 는 내용 도 개선 할 수 있 습 니 다.예 를 들 어이렇게 하면 서로 다른 기호 로 바둑 알 을 대표 할 수 있다.최종 운행 결 과 는 다음 과 같다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.