컴공러가심심해서만든2048게임C코드
게시글 주소: https://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를 선물하세요.
-
이대vs외대 0
여붕이들은 어디감?
-
이거 얼마나 기다려야 됨
-
10월 7일에 개강이라네요
-
아
-
션티 키로직부터 키스띰까지 커리 탔는데 4등급(…) 나와서 영수T 유베가는길...
-
국가의 통치자가 사회계약을 위반하는것은 가능한가에서 로크 입장이 마더텅 현돌...
-
전 진짜 소원인데
-
수능때까지 둘다 풀긴할건데 뭐에 더 비중둬야더ㅣㄹ까? 미적분이고 9모는 96점ㅁ이야
-
현역이고 국어 실모를 이제 풀어보려고 하는데 이감 괜찮나요? 보니깐 좀 어렵다는...
-
똑똑한사람이 머리굴린 인정받을만한 멍청한말이 더 인정받는듯 정치관심없는데 수능얘기하는거보면..
-
여야 둘다 뭐 여성단체들한테 터지는순간 탄핵/참패감인 물증이라도 잡혔나? 아니면...
-
시대인재 미적 숏컷, 플로우 두권만 번개장터에서 사서 풀려고 하는데 괜찮나요?...
-
힛미힛미업 2
힛미힛미업
-
강x84~88 진동 강k 76~80 진동이라 진짜 너무너무 쫄림.... 강k 88점...
-
민철게이의 경제법사회 풀어야지
-
88점 3틀 15번(시간 부족), 20번(해석 잘못 함), 21(계산 실수) 1회차...
-
가볍게 뛸건데 새벽 4시~5시 vs 오후 5시~6시
-
별거 안했는데 벌써 7렙됐네
-
ㅈㄱㄴ
-
사탐: 사문 세지 윤사 정법 경제 동사 과탐: 화학 생명 지구 내신 + 사탐런 +...
-
답에 2번이 없음 zzz
-
의치한약수간 제외했을 때요
-
ㅠㅠ
-
난이도는 그냥 평이했으면 좋겠습니다
-
난이도 어떤가요?
-
아 하기싫다
-
그러니까 움직이는 물체의 움직이는 방향 앞쪽에서 나온빛과 뒤쪽에서 나온빛이...
-
세지 해야할게 0
이것이 마지막이다 이것이 모의고사다 Jit 모의고사 기출 주요문항 복습 생각보다 많네
-
쭈꾸미 맛있당 0
쭈꾸미 볶음에 밥 넣고 볶아서 참기름이랑 김가루 뿌려서 먹기
-
생새우 3
생새우생새우생새우생새우생새우생새우생새우생새우생새우생새우생새우생새우생새우생새우생새우생새...
-
통과 예시문항 1
뭔가 다 지식만으로 풀수있는거같은데 본수능은 당연히 저렇게 안나오겠지...?
-
40일 영어 0
6모 75 9모 80입니다 방금 이명학 실모1회 77나왔는데 남은기간동안 매일...
-
대체 왜 믿음??? 이 생각만 듦 저는 부모님이 기독교여서 너무너무 믿고 싶었는데...
-
교재에 해설지가 붙어있어서 왔다갔다 필기하려니 좀 번거로운데 여러분들은 해설지에다가...
-
모습 드러낸 새로운 ‘2028 수능 통합사회·과학’ 4
예시 문항 26개 공개 26일 교육부는 2028학년도 대학수학능력시험(수능)의...
-
지겨워지겨워지겨워
-
생1 3단원(항상성과 몸의 조절), 5단원(생태계와 상호작용) 이 부분은 지금 하고...
-
21141 이렇게 뜰거같은데 일단 역사 다찍고 시작...
-
ㅈㄱㄴ
-
14,21,22,26,27,28,29,30 틀인데 확통 원래 1~2개 정도 틀리는데...
-
안녕하세요! 다른 과목들은 안정적인 등급이 나오는데 수학이 4등급입니다(확통).남은...
-
정시 내신반영 2
안녕하세요 오르비 오랜만에 들어오네요... 지금 경희대 휴학중이고 전문직 시험...
-
이번 9모 2분? 정도 남고 50 기범모 시즌1 30분 다써서 50 이정도 실력인데...
-
국바 봤는데 0
얘는 난이도 어느정도임?..화작 87 나왔는데 좀 못본건가
-
발상노트 말고 내용 단권화 찾아보면 수학은 그럴 과목이 아니다 문제나 풀어라 VS...
-
조전혁 서울교육감 보수 후보 “진보교육 10년… 무너진 학력 복구” 3
“기초학력 미달 비율 가장 높아 성취평가 확대로 공교육 개선” 오는 10월 16일...
-
ㅆ허수라 이제 차영진선생님강의로 개념 1회독했습니다. 실전개념이랑 기출강의 듣다가...
-
몬스터보다 잠이 잘깨네
-
나 생각보다 어릴지도
-
유독 과학을 못하는 애들 있잖아요
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ