컴공러가심심해서만든2048게임C코드
게시글 주소: https://m.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를 선물하세요.
-
안녕하세요. 소테리아의 길 입니다. 최근 리트 준비에 대한 글을 올린 후 많은...
-
돌아왔을때 아는사람도없고 학교생활 어케하는거죠
-
ㅈㄱㄴ 유튭에서 썸타는 도중엔 썸남, 썸녀 몰래 여러 소개팅 다녀도 괜찮다는 사람들도 꽤 많네
-
지수가 뭔 지를 20분 넘게 떠든다는 게 무엇인지..
-
더이상은 힘들고 소재도 없는거 같다..
-
국어 기출분석 과외를 반년동안 진행하다 군입대 관계로 22~25까지만 해줄...
-
기균 고려대 0
8명 지원 했는데 아직도 저말고 아무도 안 들어왔어요 ㅜ 나머지 허수라고 봐여 할까요 2명 뽑습니다
-
난 의대는 가고싶은데 의사가 하기싫은데 의대나오고 전공의?그거 한다음에 회사취직 ㄱㄴ함?
-
난 메인 딱 3번 가봄 20
첫번째는 정시커뮤 오르비에 맞지 않는 분란조장글 난 그런 의도가 아니었지만...
-
안녕하세요? 과탐으로 물생 선택한 현역입니다. 물1은 배기범 커리를 타고 있는데요,...
-
무조건 붙겟져 솦이랑 ict중에 걍 솦 했는데 뭐 차이 없겟죠?…
-
작년 수학 기준 5등급이라 빨리 공부시작해서 지금 이미지쌤 세젤쉬 다 들었는데...
-
고1 3모 국어(최고점 96인가 97이였나) 고3 6모 국어(12번틀 98)...
-
전 왠만한건 장기기억에 도움될거 같아서 듣는데 이지영쌤같이 사담 좀 많으시면...
-
인생이우울함 3
제대로된삶을가지고싶음
-
가족밖에 없다 4
생일이라고 미역국도 차려줘 먹고 싶다는 초밥도 사주시지 진짜 가족밖에 없다...
-
수학 인강 0
김기현쌤 아이디어 듣는 중인데 3강정도 들으면 한 6시간 써버림 문제 풀고 필기하고...
-
야호~ 제발 성균 경영 추합 기원 ??
-
육군.. 두렵군아
-
영어 듣기중에 독해문제가 몇문제까지 풀려있어야하나요??? 17
전 그냥 듣기다풀고 독해푸는데 유튜브에서 어떤선생님이 11문제???정도까지는...
-
왤케 뜸하지하고 모아보기 갔더니 글을 쓰고 있었구나…
-
안녕하세요 현재 수능특강과 마더텅으로 공부하고 있는 노베 예비고3 입니다 현재 듣는...
-
메가 없어서 대성만 있는데 임정환t 생윤,사문 개념만 듣고(리밋) 현돌 기시감...
-
이론적으로 몇 살까지 살 수 있으려나
-
6모 9모 수능 10
현역: 6망 9잘 수망 재수: 6잘 9잘 수평 삼수: 6잘 9망 수잘 6잘9망수잘...
-
한식vs일식 3
어디가 더 좋음? 난 한식..
-
엄대엄임?
-
똥꼬가 불타..ㅠ 20
어제 매운거 뭐먹었더라
-
봉사를 하는구나..자료도 자체제작인데
-
여친 급하게 구함 13
-
엄청난 축복임뇨 감정의 기복이 덜하면 9잘수망을 당하지 않을 수 있으며 재능이...
-
윤석열 "계엄은 범죄 아냐‥계엄 형식 빌린 대국민 호소" 육필 원고 공개 2
헌정사상 처음으로 수사기관에 체포된 현직 대통령인 윤석열 대통령이 "새해 초 직접...
-
터지긴 터지는데 엄청 느린 속도로 되는게 훨씬 빡치던데 전자는 그냥 체념이라도 할...
-
의대생들 만남 3
22학번 2명 24학번 2명 25라 구박받는중
-
국어는 자신감 2
ㄹㅇ 그 자세와 멘탈 조금 흔들려도 버틸 수 있는 게 힘인듯.. 그리고 돌고래님...
-
숙제만 잘해와라
-
물1 표본 좀 무서운데
-
중3과외랑 고3 과외랑 부담감이 걍 하늘과 땅임 중3과외는 한번 슥 읽고가면 어떤...
-
맞팔구 2
이상한 사람 아니에요
-
자기전에 할거 2
뭐 하나 다운받기 지고쿠라쿠 만와 보기
-
[단독] 윤 대통령 "거대 야당이 극좌 유튜버와 가짜뉴스 생산공장 돼" 4
윤석열 대통령 측이 12·3 비상계엄 선포의 정당성을 강변하는 논리로...
-
두 개는 최초합 하나는 불합으로 될 것 같은 느낌이…
-
개인적으로 저는 준킬러 4분 킬러 10분 걸어두는데 님들은 몇분 거시나요?
-
피램이 엄청 좋다고 들어서 피램 - 생각의 전개로 재수를 시작해보려하는데, 필수...
-
중앙대 최초합 3
영문과지만 최초합 하나 했네요
-
걸그룹 마스터 야구 중독자 (32년 무관 팀 팬) New! 오르비 경력 6년 (첫...
-
맛있는 글 하나 쓰고 싶은데...
-
최저를 맞춰야 했던 친구였는데 10월 학평을 개말아먹고(본인피셜) 과탐 1일 1실모...
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ