컴공러가심심해서만든2048게임C코드
게시글 주소: https://orbi.kr/0004914769
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
void plus(int (*plate)[4], char *input) // 이동 시 서로 붙어 있는 수가 있으면 서로 더해주기 위한 함수
{
int i, j;
if((*input=='w')||(*input=='W')) // 위로 몰아넣으므로, 맨 위에 붙어있는 수들부터 차례대로 더한다.
for(i=0; i<3; i++)
{
{
for(j=0; j<4; j++)
{
if(plate[i][j]==plate[i+1][j])
{
plate[i][j]*=2;
plate[i+1][j]=0;
}
}
}
}
else if((*input=='s')||(*input=='S')) // 아래로 몰아넣으므로, 맨 아래에 붙어있는 수들끼리 차례대로 더한다.
for(i=3; i>0; i--)
{
{
for(j=3; j>=0; j--)
{
if(plate[i][j]==plate[i-1][j])
{
plate[i][j]*=2;
plate[i-1][j]=0;
}
}
}
}
else if((*input=='a')||(*input=='A')) // 원리는 같다.
for(j=0; j<3; j++)
{
{
for(i=0; i<4; i++)
{
if(plate[i][j]==plate[i][j+1])
{
plate[i][j]*=2;
plate[i][j+1]=0;
}
}
}
}
else if((*input=='d')||(*input=='D')) // 원리는 같다.
for(j=3; j>0; j--)
{
{
for(i=3; i>=0; i--)
{
if(plate[i][j]==plate[i][j-1])
{
plate[i][j]*=2;
plate[i][j-1]=0;
}
}
}
}
}
void move(int (*plate)[4], char *input) // 이동 방향으로 수들을 모조리 몰아넣기 위한 함수
{
int i, j, k;
if((*input=='w')||(*input=='W'))
for(k=0; k<10; k++) // 충분히 여러번 반복해서 완전히 몰아넣게 하기 위함
for(i=0; i<3; i++)
{
{
for(j=0; j<4; j++)
{
if(plate[i][j]==0)
{
plate[i][j]=plate[i+1][j];
plate[i+1][j]=0;
}
}
}
}
else if((*input=='s')||(*input=='S'))
for(k=0; k<10; k++)
for(i=3; i>0; i--)
{
{
for(j=3; j>=0; j--)
{
if(plate[i][j]==0)
{
plate[i][j]=plate[i-1][j];
plate[i-1][j]=0;
}
}
}
}
else if((*input=='a')||(*input=='A'))
for(k=0; k<10; k++)
for(j=0; j<3; j++)
{
{
for(i=0; i<4; i++)
{
if(plate[i][j]==0)
{
plate[i][j]=plate[i][j+1];
plate[i][j+1]=0;
}
}
}
}
else if((*input=='d')||(*input=='D'))
for(k=0; k<10; k++)
for(j=3; j>0; j--)
{
{
for(i=3; i>=0; i--)
{
if(plate[i][j]==0)
{
plate[i][j]=plate[i][j-1];
plate[i][j-1]=0;
}
}
}
}
}
void main()
{
int plate[4][4]={0};
int before[4][4]={0};
int i, j, width, vertical, count=0, first=0, finish=0;
char input;
srand((unsigned)time(NULL));
width=rand()%4;
vertical=rand()%4;
printf("Welcome to the 2048 game.\n\n");
printf("coded by 김성보\n\n");
printf("w : up, s : down, a : left, d : right, b : back\n\n");
printf("Please press any key to start\n\n\n");
scanf("%c", &input);
fflush(stdin);
system("cls");
restart:
for(i=0; i<4; i++)
for(j=0; j<4; j++)
plate[i][j] = 0;
plate[width][vertical]=2; // 맨 처음 시작할 때 아무 칸에서나 랜덤하게 2가 생겨나게 하기 위함
while(1)
{
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(plate[i][j]!=0)
{
printf("[%5d]", plate[i][j]);
}
else
printf("[ ]");
}
printf("\n\n\n\n\n");
}
input = getch();
fflush(stdin);
system("cls");
for(i=0; i<3; i++)
{
for(j=0; j<=3; j++)
{
if(plate[i][j]==plate[i+1][j]) // 세로로 같은 숫자가 서로 붙어있는 경우가 하나라도 있으면 finish=1
finish=1;
}
}
for(j=0; j<3; j++)
{
for(i=0; i<=3; i++)
{
if(plate[i][j]==plate[i][j+1]) // 가로로 같은 숫자가 서로 붙어있는 경우가 하나라도 있으면 finish=1
finish=1;
}
}
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(plate[i][j]==0) // 한 칸이라도 비어있으면 finish=1
finish=1;
}
}
if(finish==0) // 같은 숫자가 서로 붙어있는 경우가 아얘 없거나, 비어있는 칸도 없어서 더 이상의 게임 진행이 불가능한 경우
break;
finish=0;
if(input=='w'||input=='W'||input=='a'||input=='A'||input=='s'||input=='S'||input=='d'||input=='D')
{
count=0;
first=1;
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
before[i][j]=plate[i][j];
}
}
move(plate, &input);
plus(plate, &input);
move(plate, &input);
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(before[i][j]!=plate[i][j]) // 바로 전의 칸과 현재의 칸이 완벽히 같은지를 구별하기 위함
count=1;
}
}
if(count==0)
goto end;
width=rand()%4;
vertical=rand()%4;
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(plate[i][j]==0)
count=1;
}
}
if(count==1)
while(1)
{
if(plate[width][vertical]==0)
{
plate[width][vertical]=2;
break;
}
width=rand()%4;
vertical=rand()%4;
}
end:
count=0;
}
else if(input=='b'||input=='B')
{
if(first==0)
printf("맨 처음에는 뒤로 갈 수 없습니다!\n\n");
else if(count!=1)
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
plate[i][j]=before[i][j];
before[i][j]=0;
}
}
else
printf("뒤로가기는 바로 전의 상태로밖에 돌아갈 수 없습니다.\n\n");
count=1;
}
}
system("cls");
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
printf("[%5d]", plate[i][j]);
}
printf("\n\n\n\n\n");
}
printf("\n\nGAME OVER\n\n");
printf("r : restart, e : exit game");
scanf("%c", &input);
while(1)
{
if(input=='r'||input=='R')
{
system("cls");
goto restart;
}
else if(input=='e'||input=='E')
{
system("cls");
break;
}
}
}
// 진짜 과제하러 갈게요
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
안녕하세요~^^ 4
-
고1이고 지금부터 여름방학 2주 포함하여 약 4주간 시간있어서 물 화 선행하려는데...
-
오야스미 0
네루!
-
★★★★☆
-
딱히 가고싶은 과도 없는데 현재 학교랑 과가 너무 마음에 안들어서 반수하면...
-
생활과 정보가 있는 노래
-
국어 김동욱 고전시가 8강 영어 수특 듣기 실전모 2회 7~12번 (이 밑으로 중학...
-
아무도 없나? 1
이제부터 여긴 ‘이시카와 미오’ 갤러리다.
-
오르비 전세냈다 0
수고해라 오늘 새벽 오르비는 내꺼다
-
모라타 <—- 얘가 역대 득점 1위임 난 당연히 토레기일 줄 알았는데;;
-
천만덕 달성은 2
버킷리스트
-
미적분 ㅅㅂ 4
너무 어려움. 해도해도 안느는 느낌.. ㄹㅇ 다른과목 상상이상으로 못하니까 수학만...
-
천만덕 가쥬아
-
젖지님의 제재가 필요할거같네요
-
님들다백수임? 14
오르비꺼라 ㅋㅋ 이시간에 오르비하는거부터 인생망햇다는거임
-
똥싸는중 3
푸드드득
-
저희지역은 낮에 도로침수되서 막 자동차 잠기고 그랫엇음.. 지금은 오히려ㄱㅊ
-
오니가돼라 0
어째서 이해하지 못하는거야? 오니가 돼면 천년 만년이고 오르비를 할 수 있다고
-
살아서 다행이다 21년 살면서 물난리 난 적 단 한번도 없음 심지어 하수도...
-
다들조심하길
-
불가능한가요??? 사탐 11기준으로 ㅠㅠ
-
비앤나 푸하하
-
사설이나 평가원, 교육청 수학 모고 보면 1컷 (보통 80초반대)는 나오는데,...
-
여성향 애니는 안 봐서 잘 모릅니다
-
하루를 그냥 보내요~
-
김현식 - 비처럼 음악처럼 부활 - 비와 당신의 이야기 이문세 - 빗속에서 김건모...
-
저는 그냥 투명인간처럼 살다 졸업을하든 자퇴를하든 그러고싶네요 요즘은 그 누구의...
-
3학년 1학기 기말 끝 아직 생기부도 남았고 최저도 남았지만 슬슬 끝이 보인다...
-
국어 공부 심T 0
반수생인데 패스를 전에 사두고 공부를 안 해서... 지금부터 들으려는데 커리 그대로...
-
다시 자야하나
-
게 두마리에 삼만원은 진짜 에바아님?
-
거의 7-8년? 계속 6-7타인것 같은데 오늘 커리큘럼들이랑 6모 총평같은거...
-
영화가 빡세네요 체력 다빠짐 본사람 또 있다면 대화 나눠볼만한 영화 체력 다빠짐
-
드릴드 2023 드릴 2024 드릴 2025 드릴 2026 드릴 이렇게 풀면 되는...
-
이거 프사로하니까 16
상당히 여자여자한데요... 더 귀여워져야할거같은느낌...
-
2학기 휴학할 거 같아 지금이나마 수능공부해보고자 하는데.. 7달동안 놀아서 감이...
-
야식을 못해먹겠네
-
둘중에 뭐가 더 어려움? 둘다 수1 2 미적이라는가정하에
-
물화or화생
-
논술반수 고민 0
작수 32235 언매미적화지 6논술. 수리논술로 인서울 하위권 컴공 합격 대학을 잘...
-
침착맨 ㄹㅇ 수학적 안목이 장난아닌거같음 그나이먹고 그걸 바로 이해하기만 해도...
-
맞는 선생님 찾기가 쉽지 않음
-
유튜브에 입시설명하는 사람이 냥대 과탐 가산점 없다하던데 뭐지
-
큰아빠랑 고모 둘 다 좋은 대학 못나왔는데 큰아빠는 삼성서 부장까지 하고 지금...
-
ㄷㄷ
-
중앙대 약대 1
중앙대 약대 정시로 갈려면 국 수 영 탐 각각 백분위 어느정도 나와야함?
-
ㅁㅌㅊ
-
교육과정 바뀌면 0
수시 1점대부터 줄세워서 정시에 반영해서 대학간다던데 그럼 개틀탁 들은 대학 못감?
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ