컴공러가심심해서만든2048게임C코드
게시글 주소: https://i.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를 선물하세요.
-
은행의 역할과 금융시스템 2
-
예체능 성적표 6
화작 풀고나서 1컷 100예상했는데 1컷 100인듯
-
학교 쌤들이랑 겸상 잇빠이 조이고 와버림 개쫄려
-
?
-
그저께 책을 주문했는데 아직도 배송준비중이라고 뜨네요......
-
틀리고 4번 오답 근거 한참 생각했는데 이게 ㄹㅇ 킬러죠 ㄹㅇㅋㅋ
-
.
-
9모 성적표 10
아니 국어 백점인데 백분위 96맞나요?? 오바네
-
아 씨발 3
국어 진짜 이
-
적백이보다 1점 낮지만 1/6 적백이보다 1점 높지만 1/135 둘다 낭만픽임
-
9모 성적표 4
9모 성적표 온라인으로 못보나여?
-
공통 9 10 11 12 13 14 20 21 미적 27 28 29 총 11문제인데...
-
성적표======= 국어 표점 126 백분위 96 1등급 수학 표점 119 백분위...
-
올해 물스퍼거들 다 빠져나갔으면
-
9평 언매 2
공1,언매 1 백분위95 2등급입니다~~~
-
강x9회를풀자 0
고고혓
-
국어도 한 100문제 보고 수학도 50문제 보는거임 수능 이틀동안 나눠서 보면서...
-
왜캐 비싸 ㅠㅠ
-
ㄹㄱㄴ
-
오늘 뭔 날임? 3
아무도 안왔는데 학원을
-
10월에 휴일이 참 많았던 것 같음 군대에서 병장 때 전역일 세아릴 때 50일...
-
그 전까지 3합5 계속 맞춰오다가 9평 대차게 말아먹어서 성적표 올리면 의대 지망생...
-
98인데 2등급나오던디
-
기차에서 드릴 푸는데 옆자리 중년분께서 내리시면서 시험 잘 봐요~ 하면서 내리는거...
-
학벌의 가치가 절대적일때 사람들 불안심리 자극하고 메가스터디로 사교육 시장 장악해서...
-
수학 토탈리콜 뭔가 궁금하네요.... 들어 보고 싶게 그냥 아이디어 복습이나 하는게...
-
∀x∃x(x∈A∪A^c) 는 참 모든 x에 대해 A 또는 A^c에 속하는 x가...
-
오늘의 문제입니다 경시 기하같은 느낌의 문제고 정답자 나오면 풀이올리겠습니다!...
-
미적 100점 백분위 ㄹㅇ 99임??????????? 평가원 모의고사 3연속 백분위...
-
제발 20도 초반을 유지해줘 이지랄 나지말고
-
이 문제 (ㄷ)에서 태양절대등급 4.8등급과 (다)의 겉보기등급이 7.0차이니까...
-
방금 23 언어이해 풀었는데 17개 맞은 거 실화냐 그냥 반타작 겨우 했네
-
원점수로는
-
고2임
-
이게 뭔 ㅋㅋㅋㅋ
-
근데 2주만에 이게 뭐지...
-
수능 컷에 비슷하게..?
-
양승진모 시즌1 4회를 풀겁니다 이새끼는 과연 몇점을 받을까요?!?!?!
-
똥글을 쓰면 안좋은점 11
진지한 글을 써도 아무도 진지하게 봐주지 않음 음
-
95인데 1인경우도 있나..? 재수하는데 이런건 하나도 모름,,,
-
국어풀때 시간 부족한건기본인데 진짜 어떡하죠 잘하면 독서 한지문 패스 집중력떨어지면...
-
하와와 재수생쨩 5
좋은 아침이에요 하와와와와와왕
-
수학1등급이 7퍼라는게 동점자가 엄청 많아서 가능한거에요? 12
100점이 7퍼인것도 아닌데 어떻게 1컷이 7퍼…? 그냥 4퍼로 끊으면 안되나?...
-
승리쌤… 2
아수라 쪼오오금만 빨리 올려조… ㅜㅜ
-
십지선다 해야될지.. 걍 실모를 더풀까여
-
아아, 진정하세요. 놀라게 해드렸다면 죄송합니다. 저는 의 골콩트...인사는...
-
∀x(x∈A∪A^c) 가 참 모든 x는 A(우리세계)에 속하거나 A^c(다른세계)에 속한다 QED
-
안녕하세요 오르비에 첨 글써보네요 혜윰모고 관련해서 찾아보니까 의도한건 아니더라도...
-
지금 물1 화1임뇨
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ