컴공러가심심해서만든2048게임C코드
게시글 주소: https://dev.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를 선물하세요.
-
잘자 3 0
오늘도 수고많았어
-
그냥6모나빨리보고싶네 4 0
커ㅓㅓ어어어어ㅓ어어
-
어이없네 1 0
해운대 포르쉐 환각질주 7중 추돌사고 이 사고로 크게 다친 오토바이 운전자 윤씨는...
-
오늘 단타치다 5만원 빨림 5 1
하 여러분 원래 급등주는 하는거 아닌가요?? 아니면 저만 못하는건가요???
-
최종 엔트리입니다. 기존 계획에서 독침붕이 빠지고 드래피온(방어상성 goat...
-
누누이 말하지만 난 정병녀가 좋음 12 1
칼빵을 맞더라도 멘헤라를 사귀고 말겠어
-
확통 작수 2틀인데 1 0
시간없어 28,30 다 못풀고 틀렸고 보통 2,3점에서 실수 거의 안하고 4점짜리...
-
재능이 없다면 0 0
반복 하십시오 (나에게 하는 말)
-
오르비 마크 서버 누가 열어줘 1 0
거기서 하루 종일 마크 할 자신 있음
-
아ㅠㅠ
-
약스압, 독타입 챌린지3) 근황(~플라드리 처치) 2 0
스토리 진행하느라 사진을 많이 못 찍었네요. 이제 후반부입니다. 간호순 누나 얼빡샷...
-
내일 일어나서 마저풀고 2 0
푸는것입니다 잘거임 바바
-
3월 20일 0 0
내가 사륜안을 개안하겠다
-
잔다 3 0
사실 아까도 자고 간신히 이닦고 온 거임
-
지듯노 0 0
머어어어드 슈게이즈 조아하면 돌릴만한 앨범임
-
아빠 잔다 4 0
ㅇㅇ
-
수학 진짜 자괴감드네요.. 8 0
어삼쉬사 1세트 푸는데 6~7개 막혀서 다 틀리고있고.. 개념을 몰라서 틀린게...
-
그 뭐라하지 회귀하는 느낌임 0 0
공부하고 길게쉬면 계속 노베에서 시작하는 회귀 간접체험 가능함
-
ㅈㄴ 호머때린 3덮 1 0
국어 84 수학 92 영어 95 생1 42 지1 40
-
중앙대 가기 58일차 5 1
안녕하세요 중앙대29학번 부산사나이 이동현입니다 후 중간고사가 약 5주 남았는데...
-
올해 3모 언제인가요 5 2
???? 컨텐츠 제작에 도움이 되고자 하여...
-
아니 진지한 고민인것임 10 0
독서 강의를 들을지 말지 작년엔 민철이강의 들어밧는데 도움 별로 안대고 내가 문제를...
-
고3이고 지금까지 질병결석 9번 질병조퇴 2번인데 어떡하죠..
-
님들 디카프 재탕 많나요? 1 0
작년에 산 킬러 엔제 거의 안 풀려 있고 어댑터 반 정도 풀어서 걍 작년 껄로 풀까 하는데
-
3-4시간마다 카페 바꿔다니면서 ㅇㅇ
-
더프 얘기 할거임 0 1
그니까 이걸 C를 기준으로 잡고 하면 풀릴거같단말이지 근데 너무 졸림 자고 일어나서 할거임
-
오르비 마크서버 없나 1 0
마크하고싶네
-
음음 0 0
1등 만드름
-
2027학년도 수능 대비 All Day 3월 모의고사 후기(스포O) 0 0
100분 다 채운 거 같네요 공통(21/22) (22틀) 확통(8/8)...
-
왜 나랑 롤체 안해줌? 2 0
ㅆㅂ
-
교육청 뭘로봄 0 0
선호하는게 뭐임
-
너무 기름진가
-
그럼 호머식으로 0 0
-
난 믿기지가 않음 0 0
내가 문제를 잘못봐서 8점을 날리고 계산실수해서 4점을 날렸다는게
-
생각보다 왤케 시간이 부족하냐 2 1
국어 독서 5지문 국어 인강 2강 (수국김) 수학 아이디어 2강 + 복습 하면 하루 다 감 이게맞나
-
전 잡니당 1 0
여러분 잘 자요 ♡08분들 3모 화이팅!!♡
-
으하하하하 1 0
내가 이겼다 미적 30번 컷!
-
1섶 수학 vs 3섶 수학 0 0
전자가 공통은 더어려움?
-
폐에서 받아들이지 못하고 기침 나오는데
-
가장 어려웠던 더프는 9 0
언제였음요?
-
언니 잔다 5 0
잔디 잔디 금잔디
-
나같은 심연은 정병조차 오지 않음 그냥 체념의 경지인거임 ㅇㅇ
-
남들이 못한다해도 나는 나를 믿는다
-
아빠 안잔다 2 1
엉
-
ㅈㄱㄴ
-
공군 군수 후기쓰면 보시나요 3 1
너무 늦었긴한데
-
3덮 생명 꽤 괜찮네요 0 0
방금 해설 다찍고옴 무보 1컷 45정도일듯? 킬러 아이디어 좋은듯
-
귀주톱 중 가장 깔끔하고 가장 잘 만듬 캐릭터도 ㅈㄴ게 매력적
-
이렇게공부해보신분있으신가요 3 2
지금 그냥 어영부영 하다가 아무것도 안될거같은데 물2지1언매 다 유기때리고 하루종일...
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ