C 언어 구현 푸 시 박스 게임 전체 코드
머리말
스스로 만 든 것 은 일부 코드 가 정연 하지 못 하거나 작은 문제 가 있 을 수 있 지만 게임 의 기본 적 인 조작 은 실현 할 수 있다.
코드 효과
코드 는 모두 8 개 부분 으로 나 뉘 는데 4 개 는 상하 좌우 이동 을 제어 하고 2 개 는 승 패 를 판단 하 며 1 개 통 계 는 개수 로 나 뉘 어 그림 을 그린다.
지도 수 동 설정
'0'으로 빈 칸 을 표시 하고,'1'은 벽 을 표시 하 며,'2'는 상 자 를 표시 하고,'3'은 사람 을 표시 하 며,'4'는 종점 을 표시 한다.
이렇게 하면 코드 의 이식 성 을 높 일 수 있다.
수 동 입력 지도 로 바 꾸 려 면 2 차원 배열 을 직접 정의 하고 값 을 부여 하면 됩 니 다.
int screen[9][11]={
{0,1,1,1,1,1,1,1,1,0,0},
{0,1,0,0,0,1,0,0,0,1,0},
{0,1,0,2,2,2,2,2,0,1,0},
{0,1,0,2,0,2,0,2,0,1,1},
{0,1,0,0,0,3,0,0,2,0,1},
{1,1,0,1,1,1,1,0,2,0,1},
{1,0,4,4,4,4,4,1,0,0,1},
{1,0,4,4,4,4,4,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,0}
};// ( ) i ,j
지도 에서 종점 의 개 수 를 계산 하 다.이 단 계 는 주로 게임 의 승 부 를 뒤에서 판단 하기 위 한 것 이다.
int cum(){
int i,j,k=0;
for(i=0;i<9;i++){
for(j=0;j<11;j++){
if(screen[i][j]==2){
k++;
}
}
}//
return k;
}//
지도 함수 인쇄switch 함 수 를 통 해 2 차원 배열 의 값 을 시각 화 하 는 것,즉 지 도 를 그 리 는 것 입 니 다.
주의:여기 서 6 과 7 을 정 의 했 습 니 다.겹 치 는 관 계 를 통 해 계산 한 것 입 니 다.바로 상자 가 종점 에 있 습 니 다.이 위 치 는 상자 가 있 고 종점 2 개의 표지 가 있 기 때문에 두 개의 수 치 를 합치 면 이해 하기 쉽 고 뒤의 계산 도 편리 합 니 다.
void print(){
int i,j;
printf(" wsad
");
for(i=0;i<9;i++){
for(j=0;j<11;j++){
switch(screen[i][j]){
case 0:
printf(" ");//
break;
case 1:
printf("■");//
break;
case 2:
printf("★");//
break;
case 3:
printf("♀");//
break;
case 4:
printf("○");//
break;
case 6:
printf("★");
break;//
case 7://
printf("♀");
break;
}
}
printf("
");
}
}
게임 의 승 부 를 판단 하 다.여기에 나 는 두 개의 함 수 를 썼 다.하 나 는 이 기 는 것 을 판단 하고 하 나 는 지 는 것 을 판단 하 며 값 을 되 돌려 주 었 다.그리고 주 함수 의 맨 뒤에 반환 값 을 판단 하여 게임 의 승 패 를 확정 했다.
승 부 를 판단 하 다
int win(){
int i,j,k=0;
int t=0;
for(i=0;i<9;i++){
for(j=0;j<11;j++){
if(screen[i][j]==6){
k++;
}
}
}// ,
if(k==cum()){
t=1;
}// , ,
return t;
} //
판정 패
int lose(){
int i,j;
int k=0;
for(i=0;i<9;i++){
for(j=0;j<11;j++){
if(i>0 && j>0 ){
if(screen[i][j] == 2 || screen[i][j] == 6){
if(((screen[i-1][j] == 1 || screen[i-1][j] == 2 || screen[i-1][j] == 6) && (screen[i][j-1] == 1 || screen[i][j-1] == 2 || screen[i][j-1] == 6))
|| ((screen[i][j-1] == 1 || screen[i][j-1] == 2 || screen[i][j-1] == 6) && (screen[i+1][j] == 1 || screen[i+1][j] == 2 || screen[i+1][j] == 6))
|| ((screen[i+1][j] == 1 || screen[i+1][j] == 2 || screen[i+1][j] == 6) && (screen[i][j+1] == 1 || screen[i][j+1] == 2 || screen[i][j+1] == 6))
|| ((screen[i][j+1] == 1 || screen[i][j+1] == 2 || screen[i][j+1] == 6) && (screen[i-1][j] == 1 || screen[i-1][j] == 2 || screen[i-1][j] == 6))){
k++;
}
}
}
}/* , ,
, ,
k ,
( , )*/
}
if(k==cum()){
k=1;
}
return k;// 1
}
다음은 가장 중요 한 네 가지 제어 함수 입 니 다.위로 이동
디지털 변 화 를 통 해 2 차원 배열 의 변 화 를 통제 하고 지도의 업 데 이 트 를 통제 한다.
여기 서 매우 중요 한 것 은 1 더하기 2 더하기 3 빼 기 3 이 무슨 뜻 인지 이해 하 는 것 이다.
더하기 1:상자 의 값 은 2 이 고 사람의 값 은 3 이기 때문에 상자 의 위치 가 사람 이 되 려 면 1 을 더 해 야 한다.
가 2:공 터 의 값 은 0,상자 의 값 은 2,상자 와 종점 이 함께 있 는 값 은 6 이 므 로 상 자 를 밀 때 전방 의 빈 칸 이나 종점 을 상자 에 올 리 면 수치 가 2 가 됩 니 다.
더하기 3 빼 기 3:사람의 값 은 3 이 고 사람 이 움 직 이려 면 원래 있 던 칸 은 사람 이 갔 기 때문에 수치 가 3 줄 어 들 고 걸 어 온 칸 은 사람 이 서 있 기 때문에 3 을 더 합 니 다.
이것 을 이해 하면 코드 는 매우 간단 하 다.
void movew(){
if(x>0){
if(screen[x-1][y]==1){
return ;/* , ,
*/
}else if(screen[x-1][y]==0){
screen[x-1][y]+=3;
screen[x][y]-=3;
x--;/* , ,
, , (0) (3) 3,
3*/
}else if(screen[x-1][y]==4){
screen[x-1][y]+=3;
screen[x][y]-=3;
x--;
}//
else if(screen[x-1][y]==2||screen[x-1][y]==6){
if(screen[x-2][y]==0){
screen[x-2][y]+=2;// (2)
screen[x-1][y]+=1;// (3)
screen[x][y]-=3;/* ,
, ,
, , (2) (3)
3, */
x--;
}else if(screen[x-2][y]==1){
return ;
}else if(screen[x-2][y]==2){
return;// ,
}else if(screen[x-2][y]==4){
screen[x-2][y]+=2;
screen[x-1][y]+=1;
screen[x][y]-=3;
x--;
}//
}
}
}
다른 세 가지 방향의 코드 사고방식 은 이것 과 같다아래로 이동
void moves(){
if(x<9){
if(screen[x+1][y]==1){
return ;
}else if(screen[x+1][y]==0){
screen[x+1][y]+=3;
screen[x][y]-=3;
x++;
}else if(screen[x+1][y]==4){
screen [x+1][y]+=3;
screen[x][y]-=3;
x++;
}
else if(screen[x+1][y]==2||screen[x+1][y]==6){
if(screen[x+2][y]==1){
return;
}else if(screen[x+2][y]==0){
screen[x+2][y]+=2;
screen[x+1][y]+=1;
screen[x][y]-=3;
x++;
}else if(screen[x+2][y]==2){
return ;
}else if(screen[x+2][y]==4){
screen[x+2][y]+=2;
screen[x+1][y]+=1;
screen[x][y]-=3;
x++;
}
}
}
}
왼쪽으로 이동
void movea(){
if(y>0){
if(screen[x][y-1]==1){
return;
}else if(screen[x][y-1]==4){
screen[x][y-1]+=3;
screen[x][y]-=3;
y--;
}
else if(screen[x][y-1]==0){
screen[x][y-1]+=3;
screen[x][y]-=3;
y--;
}else if(screen[x][y-1]==2||screen[x][y-1]==6){
if(screen[x][y-2]==0){
screen[x][y-2]+=2;
screen[x][y-1]+=1;
screen[x][y]-=3;
y--;
}else if(screen[x][y-2]==1){
return;
}else if(screen[x][y-2]==2){
return;
}else if(screen[x][y-2]=4){
screen[x][y-2]+=2;
screen[x][y-1]+=1;
screen[x][y]-=3;
y--;
}
}
}
}
오른쪽으로 이동
void moved(){
if(y<9){
if(screen[x][y+1]==1){
return;
}else if(screen[x][y+1]==4){
screen[x][y+1]+=3;
screen[x][y]-=3;
y++;
}
else if(screen[x][y+1]==0){
screen[x][y+1]+=3;
screen[x][y]-=3;
y++;
}else
if(screen[x][y+1]==2||screen[x][y+1]==6){
if(screen[x][y+2]==0){
screen[x][y+2]+=2;
screen[x][y+1]+=1;
screen[x][y]-=3;
y++;
}else if(screen[x][y+2]==4){
screen[x][y+2]+=2;
screen[x][y+1]+=1;
screen[x][y]-=3;
y++;
}else if(screen[x][y+2]==2){
return;
}else if(screen[x][y+2]==1){
return;
}
}
}
}
주 함수이 주 함 수 는 좀 어 지 럽 게 썼 으 니,직접 주석 을 보 세 요.
int main(){
int n,t;
int j,k;
int b=1;
here:
system("cls");//
printf(" 1
2
");
scanf("%d",&j);
if(j==1){
printf(" wsad
");//
while(1){
system("cls");/* ,
*/
print();//
scanf("%c",&n);//
switch(n){
case 'w':
movew();
break;
case 's':
moves();
break;
case 'a':
movea();
break;
case 'd':
moved();
break;
} //
t=win();
if(t==1){
goto there;
}// ,
if(b == lose()){
system("cls");
print();
printf(" ");
return 0;
} //
}
}else {
system("cls");
printf("
1\t 2
");
scanf("%d",&k);
if(k==1){
printf(" , , ");
return 0;
}else {
goto here;
}
}// ,
there:
printf(" !");
return 0;
}//
모든 코드 는 여기까지 입 니 다.전체 코드 가 필요 하 다 면 메 시 지 를 남 길 수 있 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.