컴공러가심심해서만든2048게임C코드
#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를 선물하세요.
-
키182
-
지난 수능 준비할 때 푸셨던 교재나 실모 남겨두시나요 아님 버리시나요
-
얼?버기 2
모든 게 끝나고 자는 늦잠은 꿀맛이네요 :)
-
딱히 막히는 것도 없고 쉽다고 머리로 느꼈는데 4페들어가니 시간이 부족해서 18번...
-
성한 0
성한 적당한 공대 되나요 ...???? 서강대는 국어때문에 안 될 것 같고 ..
-
더 멍청했으면 지구 17번 5로 찍고 맞추는건데
-
국어 언어와 매체 90-91 화법과 작문 92-93 수학 확률과 통계 92-93...
-
세계사 요/금 낚시문제랑 사문 하나 좀만 더 자세히 봤으면 맞출 수 있는 거였는데...
-
재종 기숙 상담 0
25수능 22226 (언매 미적 생지) 의대 1차까지 붙었는데 3합4 최저 못...
-
이거 자랑글 아니고 진짜 진심 물음표 떠가지고 글씀 2
서울대 화학부가 어떻게 의대보다.....?
-
진학사 점수 0
예를들어 현재 제 점수가 300이라고 뜨면 작년에 300이라고 점수 떠있는 사람이랑...
-
아......... 자꾸 생각남
-
어제 뼈맞음 1
슈뱅에서 보닌 성적 가지고 라인잡고 있었는데 실시간 채팅에 올라오는 말이... 와...
-
이분 일반인인데 키 182 73-4 라고 하는데 이 키에 이 몸이면 현실에서...
-
호흡 긴 삼각함수 vs 변곡점 찾기인데 왜 후자가 정답률 절반임?
-
1등급 발뻗잠해두되죠??? 4합5맞추야해요 ㅠㅠㅠㅠ
-
1컷 89래요?
-
올해 3월부터 공부를 하기 시작했는데, 전역한 직후입니다. 공부를 처음 시작할 때는...
-
N년동안 처음으로 2떴음 하..
-
재수해서 0
평백 60에서 평백 84까지 올리면 멈춰야함 ? 아니면 계속 고 군수임
-
집에 남아있는 수학 omr가지고 일의자리를 십의자리에 실수로 마킹하고 넘어갈 때...
-
물리 1. 고딩때 학교에서 수업함 (전과목 8등급인데 물리는 4등급) 2. 올해...
-
제발 지2 만표 75 up here we go 한번만 해주면 안되겠냐 솔직히...
-
기하 251130은 22에 비견되는 급이었다. 결국 결과(정답률)이 말해줌. 출처: ㅋㅌㅌ님
-
컷이 89점이면 2등급 뜰 수도 있는건가요??
-
궁금
-
언매2컷 0
언매 1틀 83 2뜰 가능세계 아예 없음? 나 이거때문에 최저 못 맞추게 생겼는데
-
미적 73점인데 메가는 81이고 고속은 85임 원래 이렇게 차이남?
-
어떻게 11점 차이가 났던거지..... 아니 뭐 존나 쉬워서 그랬던건 알죠 근데...
-
라고 할때 2년잡고 물2할걸
-
좋다좋아 3
온라인강의로 전환 달다달아
-
운동하시는 분들 있음? 10
키 182에 이정도 몸이면 예비군 가면 몸 괜찮은편임? 궁금 글고 일반인 치고몸 괜찮은편?
-
모닝니쿠 3
토리니쿠
-
돈을 벌어보자
-
으아개춥네 5
머플러하고나올걸
-
다리찢기도 오랜만에해보니까 Cos(theta) = -1/2정도 나오는거같음 에반데
-
내년기하: 생2에게 따잇 뭔가 느낌이 그래
-
언매 공통 3틀 92 미적 공통 4틀 선택 4틀 69 각각 몇등급 예상하시나요?...
-
무휴반 삼반수를 해볼까
-
성대인듯 연대, 서강대, 성대, 경희대, 외대, .. 다 가봤는데 성균관대가...
-
최저러라서 간절합니다 언매 공통 3틀 미적 공통 4틀 선택 4틀입니다
-
오늘의 깨알상식
-
야스장 입개루 4
야스 ㄱㄱ
-
누가 옆 시험지에 물 쏟은 사례가 있는건가
-
올해는 뉴분감으로 했는데 진도가 늦어서 9모 끝나고 다함 2026 대성 19패스...
-
다른 사람들을 보아하니 11
못보면 당연히 아쉽고 잘봐도 아쉬운게 수능이구나 너무 잔인하군..
-
공통 2틀 언매 2틀 91점인데 EBS로는 표점 130점 1등급이고 메가로는 표점...
-
다 푸셨나요? 다 풀어야 합격이겠죠??
-
문과라인 봐주시면 감사드리겠습니다 사회계열 가고싶은데 가능할까요? 어디까지 가능할지...
-
미적에서 기하 7
6월 1컷, 9월 안정1 이었고 수능 2 떴는데 28 30 거의 고정으로 못풀면...
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ