컴공러가심심해서만든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를 선물하세요.
-
내일 시험인데 공부하나도안함... 유급당하는거아니겠지 출석과제는 다하는데
-
오늘 ㅇㅈ 5
-
본애니 9
별로없음 + 원펀맨 암살교실 프리렌 보는중인건 소녀종말여행 아베무지카...
-
하나 4
하나무브링 크카캌ㅋ
-
근데 왜 내 닉 6
제 닉은 무브링인데 왜 다들 브링이라고 하시는 거조
-
엄두가안나네
-
난 24시간도 못 버티고 중간에 쓰러짐
-
이화 간호학과목푠데 3모 141받음(사탐 공부안함..) 논술도 볼거라서 목표하는...
-
놀면 안되는데 일단 놀고 보는 깡 정도나 생길 수 있는거임
-
모두 굿밤 3
좋은 밤 되세요 너무 늦게 자서 후회하지 마시고
-
저능대결 3
여러분이 승자입니다 감사합니다^^ ㅈㅅ농담임
-
저능대결 4
내가 이김
-
실모 배틀하면 누가 이길거 같음?
-
무려 5cm정도임
-
ㅋㅋㅋ
-
예체능이고 반수생입니다 체대인데 좀 높은 학교를 원해서 반수하려고해요 작수 성적은...
-
YAHO 3
예후
-
횽아들 잘쟝ㅅ 4
난잘거지렁
-
흐어어어어ㅓ어엉
-
하이샵님 Goat 10
전글 애니 이름 찾아주심..
-
고등학교였다면 절대 불가능했을 풍경인데 그 짧은 시간만에 이렇게 상황이 손바닥뒤집듯...
-
아쉬운 거지 5
-
평소에 공부 안 했으면 12
시험 직전에라도 안 자고 해야되는데 그냥 자고싶음 걍 ㅂㅅ인듯
-
나뮈키엔 자주관악 나와있긴한데 설대생이 자주~관악!!! 이러는거 못봄 우린 통일연세...
-
그치만 생각쨩은 영웅이 아닌 걸.. 흐어어어어어어엉ㄹ
-
학교같은거적응안됨 그냥 한공간에 nn명이상이면 불쾌함.. 이런 개 찐따같은 성격이라...
-
나 오늘 시험 있는데... 자야겠다 좋은 꿈 꾸세요
-
3모 낮2등급인디 공통 미적 1강씩 들어봤을때는 어렵진않고 이해개잘되는디 앞부분이라...
-
1,2단원 풀어봤는데 굳이 시간내서 풀정도 퀄리티는 아닌거같다는 생각드네요 안풀어도되겠죠?
-
남주가 여주랑 처음 소개팅에서 만났는데 여주가 소개팅에 지루함을 느껴서 빠져나와서...
-
집을 안나간다면..
-
무물보 12
-
반수 상담해주실분 ㅠㅠ 18
안녕하세요..지금 외대 어문과 다니고 있는 사람입니다 작수 백분위...
-
불편하네요
-
1. 백양로는 평지가 아니다. 2. 언기도 주황색 바닥쿠션 자리에서 낮잠 자면...
-
나에겐 오르비언이 있으니까
-
오공완 1
인제 집들어감 3시간밖에못자네.... ㅎㅇㅌ입니다다들
-
좃대따 0
잠이 안 온다
-
평가원에 나오지도 않는 이런 글자 지우기 유형 수특수완교육청에는 자주 보이는데 일단...
-
하 씨발
-
군필이긴 한데 늦었으려나 미대쪽인데 애들이 같이 안놀아줄까?.. 대학교 맛본적이 없어서 모르겠네
-
독학 재수생입니다.. 알람이 울리면 끄고 자게 돼요ㅠㅠ 의지가 부족한 거겟죠..?...
-
대성 vs 메가 0
화작-기출+@로 독학할듯여, 작년 재수 막판에도 이랬고 생윤- 어준규 vs 김현수쌤...
-
난네가생각이나서 0
없는앤딩을쓰고
-
2028 교육과정에서 수능 내신 반영한다는데 어카지 0
고2고 전국 자사고 다님 내신 6등급 후반에 모고 성적도 하위권이라 아예 정시로...
-
에타 비게는 0
오르비의 좀 선넘는 쌉소리만 모아둔 곳이라고 보면 되는 수준이라 에타가 더 음지였음...
-
둘다비슷한거같기도
-
감사합니다.
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ