컴공러가심심해서만든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를 선물하세요.
-
한 시간 전에 갑자기 상근예비역대상자로 선발되었다고 카톡이 왔습니다. 이게 뭔지...
-
중앙대 기계공 68명 뽑는데 49등이고 표본분석했더니 열몇명 정도 빠질것 같기는 함
-
너무 늦은건 아니겠죠..??
-
프사만바꿔도 뉴비가 될수있다
-
이게 어떻게 자신의 생존을 위한거임? 오히려 같이 따라올 수 있는 가족 걱정하는거...
-
조정식 드랍? 0
괜찮아 다들었고 믿어봐 듣느중인데 그냥 드랍할까 고민되네요.. 도움 되는거라던지...
-
흠
-
진학사 1
자러가도 될까요?
-
3-1 3-2에서야 자구 알고리즘 배우는 븅신같은 학교들 국숭세단 밑으로 ㅈㄴ많음...
-
아마 내일부터 이월 들어오니까 내일부터 집중하면될듯
-
고대 교우 표본 0
낙지에서 거의 대부분 과가 2배수도 못 돌았는데 작년에도 이랬나요??작년 경쟁률은...
-
메디컬 200명 서울대 100명 연세대 300명 제발…
-
일단 진학사 변동 없으면 외대 상경(영어로 수업하는 과)갈꺼고 수능 98점, 3년...
-
국어 공부법에 관련해서 상의하고싶어요 쪽지좀 주세요
-
실수 하나 하면 라인이 쭉쭉 내려감 여기서 수학 하나 더맞으면 oo대...
-
한의대 사탐런 0
삼수생임 한의대 노리는데 이번 수능 물리3 지구 높2 나옴 물리는 걍 버리고...
-
계속 처들어오네 올해도 글렀다 ㅅㅂ
-
서강대식 1
서강대식 인문 501.98인데 경제, 경영 둘 다 안정권으로 볼 수 있을까요..?
-
이원준T 문학 2
어떤가요
-
나머지 기본적인 친족어는 다 고유어 있는데 엄마, 아빠, 누나, 오빠, 할머니,...
-
좀 찾아보니까 서성한과 동급이라는 의견이 꽤 많던데 맞나요?
-
5칸이 100명 뽑고 실지원 41/175 전체 118/752라 안떨어질거 같은데...
-
자기는 건대만 가도 만족이래
-
이제 찼네
-
근데 성적 올리면서 눈 높아져갖고 나처럼 원트에 서성한 가도 sky목표로 재수함
-
아 2
이 임티가 발뻗잠 뜻하는거였나 발뻗잠 ㄱㄴ
-
'언니'라는 단어는 사실 19세기 말에야 문증되기 시작하는, 친족 어휘 중에서는...
-
정시로 14명 뽑음
-
이렇게 하는 거 맞나요? 보통 연락처다르게 해야함요? +++) 공식 계정 팔로우하고...
-
지방약수 표본 다 찬 건가요??
-
성대 건환공이랑 수교가 원래 많이 모이는 과인가.. 0
이런 씨발.. 왈케 사람이 많은것이니
-
낙지 미친놈들 0
아니 낙지 적정표본수 확보햇는데 최초합 왜이리 조금주냐 64명 모집인데 40등까지만 최초합이네..
-
자기 잘못도 아니고 쌩재수 +1 된 거 아님?
-
후다닥 후다닥 할 수 있을 거 같은데
-
무섭다
-
아오
-
재수하는친구 등급인데 국어가 높은 2래 올해 여기 못가면 우짜노... 문과임 근데...
-
경희약 미쳤네 0
585가겠는데 이러다가
-
이번에 재수해서 대학에 합격하고 문서등록은 했습니다 전에 다니던 대학은 언제까지...
-
저메추 5
급해요
-
이럼 99.999999% 3떨+복학인데 리트 준비해서 학점 안보는 충북로나 시립로...
-
안타깝습니다 고등학교 때부터 대중독재에 대한 관심이 깊었고 이게 가장 잘 나타나는...
-
3칸 됐는데 2
이거 안되나요??
-
약대 뱃지 달고 있지만 아무튼 한의대생임 시카모 쵸카와이한 하니대셍인거시에오 는...
-
기균 정시는 정보가 없다보니까 어느정도 라인인지 감이 안잡히네요ㅠ 이정도 성적이면...
-
456 ㅁㅌㅊ? 1
3성 ㄷㄱㅈ
-
인하 아주 광운 6
인하 아주는 소비자학과,어문이고 광운은 행정학과인데(셋 다 5칸) 서울...
-
쓰레기니까 공대써라
-
씨발 2
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ