C 언어 로 삼자 기 게임 을 하 겠 습 니 다.
초기 작업 은\#define 을 통 해 식별 자 를 정의 하여 상수(바둑판 의 가로 좌표)를 표시 합 니 다.
(코드 작성 에 좌표 가 필요 한 곳 이 많 기 때 문 입 니 다.그러면 코드 를 읽 을 때 독자 들 이 현재 의 값 이 무엇 을 대표 하 는 지,즉 코드 의 해석 에 어려움 을 겪 을 수 있다.따라서 이 코드 에서 매크로 정 의 를 사용 하여 이 문 제 를 해결 하 는 동시에 나중에 바둑판 의 크기 를 변경 하 는 데 도 편리 하 다.)
#define MAX_ROW 3
#define MAX_COL 3
게임 생 성 절차1.바둑판 만 들 기
바둑판(2 차원 배열)을 만 들 고 초기 화(공백,하위 상태 없 음)합 니 다.
//1.
void init(char chessBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
// ( )
chessBoard[row][col] = ' ';
}
}
}
2.바둑판 인쇄바둑판 을 인쇄 하여 게이머 들 이 이 바둑판 의 상 태 를 볼 수 있 도록 합 니 다.
//2.
void printChessBoard(char chessBoard[MAX_ROW][MAX_COL]) {
printf("+---+---+---+
");
for(int row = 0; row < MAX_ROW; row++) {
printf("|");
for (int col = 0; col < MAX_COL; col++) {
printf(" %c |", chessBoard[row][col]);
}
printf("
+---+---+---+
");
}
}
3.플레이어 슬롯유 저 는 좌표(row,col)타 자 를 입력 합 니 다.
주의:유저 가 좌 표를 선택 한 후 합 법성 검 사 를 해 야 합 니 다.즉,유저 가 떨 어 진 곳 에 이미 하위 가 있 는 지 판단 하고 있 으 면 유 저 는 좌표 의 타 자 를 다시 입력 해 야 합 니 다.
//3.
void playMove(char chessBoard[MAX_ROW][MAX_COL]) {
while (1) {
int row = 0, col = 0;
printf(" :");
scanf("%d %d", &row, &col);
//
if (row < 0 || col < 0 || row >= MAX_ROW || col >= MAX_COL) {
printf(" ! ");
continue;
}
// ( , )
else if (chessBoard[row][col] != ' ') {
printf(" , ");
continue;
}
else {
// , , 'x',
chessBoard[row][col] = 'x';
break;
}
}
}
4.승부 상황 판정4.1 현재 의 승부 상황 을 판단 할 때 네 가지 승리 방식 이 있다.
1)가로 세 개 는 모두 같은 문자 이다.
2)세로 세 개 모두 같은 문자 이다.
3)1,3 상한 대각선 의 세 위 치 는 모두 같은 문자 이다.
4)2,4 상한 대각선 의 세 위 치 는 모두 같은 문자 이다.
//4. , , 4
// , x; , o; p;
char chessWin(char chessBoard[MAX_ROW][MAX_COL]) {
// 3
for (int row = 0; row < MAX_ROW; row++) {
if (chessBoard[row][0] != ' ' && chessBoard[row][0] == chessBoard[row][1] && chessBoard[row][0] == chessBoard[row][2]) {
return chessBoard[row][0];
}
}
// 3
for (int col = 0; col < MAX_COL; col++) {
if(chessBoard[0][col] != ' ' && chessBoard[0][col] == chessBoard[1][col] && chessBoard[0][col] == chessBoard[2][col] ){
return chessBoard[0][col];
}
}
// 2,4 3
if (chessBoard[0][0] != ' ' && chessBoard[0][0] == chessBoard[1][1] && chessBoard[0][0] == chessBoard[2][2]) {
return chessBoard[0][0];
}
// 1,3 3
if (chessBoard[2][0] != ' ' && chessBoard[2][0] == chessBoard[1][1] && chessBoard[2][0] == chessBoard[0][2]) {
return chessBoard[2][0];
}
if (isFull(chessBoard)) {
return 'p';
}
return ' ';
}
4.2 승부 상황 판단 후 4 가지 상황 이 있 는데 그것 이 바로 다음 과 같다.1)유저 가 승리 하여'x'로 돌아 가기;
2)컴퓨터 가 이기 면'o'로 돌아간다.
3)바둑,바둑판 을 가득 채 웠 지만 승 부 를 가리 지 못 하고'p'로 돌아간다.
4)바둑판 과 자 리 는 비어 있 습 니 다.바둑 을 계속 두 고 돌아 갑 니 다.
우 리 는 주 함수 에서 문자 변 수 를 정의 하여 프로그램 이 끝 난 것 이 무엇 인지 판단 한 다음 에 게이머 가 이 겼 는 지,컴퓨터 가 이 겼 는 지,바둑 이 끝 난 것 인지,게임 이 끝나 지 않 았 는 지 판단 합 니 다.
문자 형 변수 에 따라 게임 의 결 과 를 알 수 있 습 니 다.
4.3 기합 여 부 를 판단 하 는 함 수 는 다음 과 같다.
//4.3 ( , ), 1 , 0
int isFull(char chessBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
if (chessBoard[row][col] == ' ') {
return 0;
}
}
}
return 1;
}
5.컴퓨터 락(컴퓨터 랜 덤 락)rand()함 수 를 통 해 컴퓨터 의 무 작위 타 자 를 실현 합 니 다.
(잉여 연산 은 아주 좋 은 절단 방법 이다.여기 서 우 리 는 잉여 연산 을 통 해 가로 좌표 의 값 을[0,2]사이 로 제어 했다.)
//5. ( )
void computerPlayMove(char chessBoard[MAX_ROW][MAX_COL]) {
while (1) {
// x,y [0,2]
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
// ( ), ,
if (chessBoard[row][col] != ' ') {
continue;
}
// , ‘o' ,
chessBoard[row][col] = 'o';
break;
}
}
6.승부 상황 판정과정
7.주 함수
전체 프로그램의 시작 이 아 닌 문자 형 2 차원 배열 바둑판 을 주 함수 에 썼 습 니 다.
이 유 는 시작 에 쓰 면 이 변 수 는 전역 변수 입 니 다.
전역 변수의 생명 주 기 는 전체 프로그램 으로 더 많은 메모 리 를 차지 할 것 입 니 다.또한 프로그램 중간 에 이 변 수 를 사용 했다 면 메모 리 를 사용 할 수 없습니다.
그 밖 에 전역 변수의 역할 영역 은 전체 프로젝트 입 니 다.어디서 바 꾸 면 전체적으로 영향 을 받 고 문제 가 어디 에 있 는 지 알 아 낼 때 귀 찮 을 것 이다.
따라서 전역 변 수 를 최대한 사용 하지 않 는 다 는 원칙 에 따라 이 변 수 를 주 함수 에 썼 다.다른 함수 가 이 매개 변 수 를 필요 로 할 때,다시 전 참 하여 사용 하면 된다.
int main() {
char chessBoard[MAX_ROW][MAX_COL];
char winner = ' ';
//1.
init(chessBoard);
while (1) {
//2. ,
printChessBoard(chessBoard);
//3.
playMove(chessBoard);
//4.
winner = chessWin(chessBoard);
if (winner != ' ') {
// ,
break;
}
//5.
computerPlayMove(chessBoard);
//4.
winner = chessWin(chessBoard);
if (winner != ' ') {
// ,
break;
}
}
if (winner == 'x') {
printChessBoard(chessBoard);
printf(" !");
}
else if (winner == 'o') {
printChessBoard(chessBoard);
printf(" , ~");
}
else {
printChessBoard(chessBoard);
printf(" , ~");
}
system("pause");
return 0;
}
이상 은 바로 제 가 삼자 바둑 게임 의 사고,코드 와 주의해 야 할 점 을 쓰 고 있 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.