컴공러가심심해서만든2048게임C코드
게시글 주소: https://spica.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를 선물하세요.
-
https://orbi.kr/00070557878
-
유의미한 건 아니지만 한 문제 차이로 높5등급 받았어요 강대 별관 가려는데 수업...
-
기균 연고대 2
수급자라서 기균 쓸 수 있다면 고대보다는 연대 쓰는 게 유리하겠죠??
-
사실상 개개인들의 선택으로 결정되는거니까 결국 운이네... 원서 단 한 장을 가지고...
-
한양대 경영 논술로 붙은사람? 나랑같은 기적을 겪은 친구들 어딨는지 궁금해 댓글써줘
-
ㅈㄱㄴ
-
미대 기준으로 0
어디가 낫나요?
-
작년 거 안 풀었던 거 이어서 풀고 있는데 시즌1 수2는 지금 이틀짼데 15문제...
-
제 전글 이륙한번만 부탁드려요 이륙되면 미련없이 떠나겠습니당 경찰대 합격증 ㅇㅈ은...
-
국어 5등급이면 14
어느정도 수준인거임????
-
로씨행 같은 고시류 안되면 취업은 공대기준 어느정도 라인이랑 비슷하게될까요
-
노? 0
신고
-
고속왔네 1
-
어
-
서울대학교 재료공학부 25학번 신입생 여러분을 찾습니다! 0
[재료공학부 25학번 신입생 분들을 찾습니다!] 안녕하세요, 서울대학교 재료공학부...
-
조건) 얼굴과 이름을 알아야함 가능)인강강사, 유튜버, 독자학교 전교1등,...
-
수학 정수론 책 0
보통 어떤 저자꺼 많이 쓰는지 추천해주세요! 독학할 예정입니다.
-
지구황님들 5
화1->지1으로 바꾸고 이훈식T 식스피드 듣는 중인데요(내신 때 공부해봄)...
-
공부 하면서 체력이 너무 떨어져서 이번년도는 달리기 하려고 하는데 언제 하는게 좋을까요?
-
687이면 어느 정도 가능성있을까요? 완전 불합..?
-
삼반수 고민글 4
24학번으로 성대 입학하고 올해 재수한 재수생입니다. 사진과 같이 성적이...
-
언매 2025책이랑 나기출 있는데 굳이 2026걸로 갈아타야 할까요? 7강까지...
-
사수해서 약대 14
인식이 어떰 진짜 마지막으로 갈아넣을건데 수학 영어 윤사 만점 목표로 공부하고
-
으어 피곤해...
-
N수 결정하는거 안어려웠나요? 전 수능에서 실수를 너무 많이해서 아쉬움이 남는데 또...
-
교양과목 교수님이 연구실 놀러갈 때마다 15 정도씩 주시고 밥도 사주시기로 했는데...
-
동아시아사가 화1의 목을 딸 날이 얼마 남지 않았다 10
ALLEZ ALLEZ ALLEZ!!!
-
어차피 추합발표 나봐야 아는거 머리로는 다 아는데 계속 예비 누구 빠진다고 안하는지...
-
김동욱 커리 1
예비고3 김동욱 처음 듣는데 수국김만 듣나요 처음은?
-
생각보다 표본이 안들어와서
-
탈릅밖엔 방법이 없나… 집에 있으니까 수시로 오르비 보고 있네
-
고속살걸 2
메디컬 생각 없으면 텔그 쓸모없는듯
-
현실적으로 사탐시작하는게 맞겠지..
-
우웅 8
웅웅
-
뭐가 볼록 생김
-
두시간연속새로고침후댓글달기만반복하는즁 옯창이이런건가
-
가능한가요?
-
참고로 수능은 생지치고 대학옴 자선으로 일물이랑 공학 하나 들었는데 걍 나는 깜냥이...
-
기하는 15760명
-
4반수 고려중이긴한데 이번에 국어 역대급으로 꼴아박고 화1 노답으로 나와서 갈...
-
노베는 윤도영 현강 따라가기 벅차나요? 통합과학은 했고 이번 겨울시즌부터 바로...
-
약간 겸손? 같은거에 포커스를 맞추고 싶은데 고2가 마이크로피펫같은 실험기구도...
-
이게 대형과, 중형과, 소형과에 따라 조금 다를 수 있는데 대개 진학사는 보통...
-
진짜 떠나기 전 한마디 18
06년생들에게 여러분들도 언젠가 새터든 mt든 어디서든 술을 마시게 될텐데 제발...
-
똥글공장 재가동 해버렸잖아
-
냥대 과 4
한양대 도시공 자원환경공 유기나노공 많이 별로 인가요ㅠㅠ 그나마 뭐가 제일 나을까요..
-
그저 대 대 대 ㅋㅋㅋㅋ
-
투과목 표본 13
썩은 순서대로 나열좀ㅋ 근데 지2는 왜이리 음침함? 실채컷 변동이 가장 심한듯
-
과외 구할라는데 1
숨고에 올려도 수요 있을라나.. 지방이라 이용하는사람 얼마없을거같은데
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ