컴공러가심심해서만든2048게임C코드
게시글 주소: https://games.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를 선물하세요.
-
많이 별로임? 법무사+세무사 둘 다 있으면?
-
어르신 조은 하루 보내세연
-
신성규쌤 유튜브 해설 영상 다 내려간 거 아쉽네.. 0
거기서 진짜 많이 배웠는데 개인적으로 D=0 풀이 <--이게 가장 기억에 남음.
-
https://orbi.kr/5a5e99f2-422f-4155-a246-ee5065b...
-
??
-
션티 홍보 0
키싱앱 너무 굿
-
너무 막바지에 있어서 무서운데 추합도 많이 안 돌 것 같아서...
-
ㅋㅋㅋㅋㅋㅋㅋ아 설윤교로결정햇다고 글을 썼네….사범 안 썼습니당 (╹◡╹)
-
근데 교육청은 대체적으로 계산량이 좀 있는거 거 같음
-
멘사코리아 직접 가서 iq테스트 해보신 분 있어요?? 17
멘사코리아에서 주최하는 멘사테스트를 쳐볼까 하는데 (25년 일정은 아직 안 나옴)...
-
단어가 개어렵네 0
영어 고1에서 고2모고로 올라오니 단어가 진짜 개어려운데 단어부터 외우고 오는게 맞으려나
-
이제 빨뻗고 똥글 쓰자
-
철학의 본질이 인간의 존재에 대한 질문과 탐구라면 신화는 가장 오랜시간 이어져...
-
농협 하나로마트 만세
-
내가 미안해 빨리 돌아와줘
-
초염몽 원톱으로 스토리 밀었어서 갸라도스 <<< 이새기 진짜 통곡의 벽이였는데 이...
-
작년엔 가천대도 못붙었는데 그래도 올해는 숭실 동국 홍익넣고 원서생각하면서 기다리는...
-
붙나요? 윗순위라 궁금합니다
-
킁 개 좋네 5
캬
-
영어 기출문제집 0
영어 기출문제집중에 3,4,7,10모만 다루는 문제집 없을까요?
-
무슨 2월까지기다려어엉ㅇㅇ엉ㅇ어어엉ㅇㅇ
-
[고려대학교 25학번 합격] 합격자를 위한 고려대 25 단톡방을 소개합니다. 1
고려대 25학번 합격자를 위한 고려대 클루x노크 오픈채팅방을 소개합니다. 24학번...
-
무서운 이야기 4
오르비에는 가끔 온갖 분야를 꿰고 설교까지 하는 전문가분들(학부1학년, 대학입학전)이 나타난다
-
스텝0 전 단원 다 풀고 스텝1? 아니면 단원별로 스텝0 스텝1?
-
반도체관련 취직하려면 어디가 좋나요
-
얼버기 2
버기
-
얼버기 7
갓생 2일차
-
꾸중글 0
꾸중꾸주ㅇ
-
커뮤에서 활동하는 컨설턴트는 수두룩빽빽인데 왜 자기네 컨설팅 불호후기나...
-
로스쿨 왜 가냐 3
변호사 인구 ㅈㄴ많은데 돈도 요즘 ㅈㄴ 못 번다는데 워라벨도 죽었고 그 노력에...
-
환자수가 훌륭한 의사를 만들어주는거임 의사가 혼자서 공부 디지게 열심히 해봤자 환자...
-
어디서 보는질 모르겟어서..
-
점공 더 이상 안들어온 것들은 싹다 허수로 취급한다 0
니들은 내 앞순위도 아니고 점공 하나마나인 친구들로 간주한다
-
의료는 생각보다 대량생산, 시스템화 하기 어려운 분야니까 그런데 “생각보다 괜찮다“...
-
통풍이 작년봄인가 그때 아프고 또 재발했나보네 절뚝절뚝거리고 발날로 걷는중 왼발은...
-
안녕하십니까 도움을 주시길 간청드립니다 ㅠ 수능을 오랜만에 준비하는 N수생 입니다....
-
ㅜㅜ
-
이제는 달릴 일만 남았다
-
if국수만점, 과탐 선택 물1vs생1 (서울대의대) 6
국수 만점이라고 했을때, 서울대의대 과탐 1과목2개로도 가는case가있길래 천장을...
-
작년에도 뉴런 했었는데 또 사서 들을 가치가 있나요?
-
오늘?부터 다시 공부 시작해요 지옥을 가보자고! 피램 킷타!!!!
-
고3때 시발점 미적분 상,하 듣고 워크북이랑(step2는 다는 못품) 쎈 풀고 뉴런...
-
고3 훈수 1
겨울방학 동안 몇과목 빡세게 집중해서 하기 vs 전과목 다 하기 13일동안 거의...
-
안녕하세요. 저는 공군 상병으로 현역 복무중인 03년생입니다. 특정되는거 감수하고...
-
자녀에 대해 다 안다고 생각하는 학부모 이건 답도 없다
-
문과에서 살아남기 1 43
안녕하세요, 한달뒤는입니다. 문과가면 큰일나는 것 같은 요즘 분위기에서 인문계...
-
요즘 12시에 일어나서 나한텐 지금이 점심임
-
대기업도 보면 임원진들은 남자가 대부분이던데 물론 4050 여자들은 애 키운다고...
-
운동화 신어도 됨?????????? 남색 나이키 운동화
-
어느정도 갈 수 있을까요...?? 언매/미적/화생 입니다! 영어 1 한국사 3이요...
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ