컴공러가심심해서만든2048게임C코드
게시글 주소: https://9.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를 선물하세요.
-
ㅈㄱㄴ
-
세상을 좀 이분법적으로 보지 마세요 과거에 민주당은 어쨌느니 저쨌느니 아니 왜...
-
300p 기준 몇 시간 컷?
-
그냥 의사라도 되면 훌륭한거
-
민주당 정당해산 확실시! 라는 제목으로 영상 올리면 30만뷰 ㄱㄴ?
-
https://www.chosun.com/national/court_law/2024/...
-
어디가야 나중에 편할까.. 왠진 모르겠지만 진학사 기준 둘다 5칸인데.. 뭐...
-
지극히 정상적인 소리에도 좌빨 빨갱이 등등 부정선거 음모론에 조목조목 근거 대면...
-
얼버기 7
-
아웃풋은 부산경북대가 국숭세단 아웃풋 이긴다고하는데 그건 옛날에 부산경북대가...
-
만약 원서 넣은 세 곳 중 두 곳에서 최초합을 받으면, 두 곳 다 등록 해놓고 계속...
-
샤주풀이 신점 2
해양대랑 인서울 문과 고민돼서 갔는데 입소문난 세 군데나 갔는데 똑같은 얘기를 하면...
-
남르비면 개추좀
-
40분 내내 3대1구도 ㅋㅋㅋㅋ
-
M사의 백분위 기준 정시 지원 참고표를 토대로 전기전자,기계,화공(관련 학과를 분리...
-
내 인생 최대문제
-
얼버기
-
경희대 설캠 국캠 12
이과 학생인데 설캠 자율전공학부 국캠 자유전공학부 어디 쓸지 너무 고민입니다,,...
-
다군은 뭐쓰심? 안가더라도 순천향박나
-
사과계는 표본이 351명이거 인과계는 표본이 685명인데 사과계 표본은 왤케...
-
이시간에자면 내일 일어나서 하기엔 업뎃시간때메 엄청 촉박할것같은데 할건하고자야겟죠? ㅎㅎㅎ
-
칸수 665 0
어떰가요 ㅋㅋㅋ
-
ㅇㅂㄱ 1
일어나자마자 속이 엄청 메스껍네...
-
맨유 소식은 몰랐는데 또 졌네 뭐지
-
롱 옵치 큐가 잘 잡히네요
-
스위트홈이랑 개똑같음 ㅣ
-
인생 꼬라지
-
경제학과 지망하는데 수능 특히 국어를 좀 많이 망쳐서... 지금 정시 상담...
-
럭스덱간다 말리지마라
-
개빡티는데 어카냐 중국인같은데 텔을 쳐 잡든지 왜 편의점에서 저러는지모르겟음 화장실...
-
진학사를 돌려보는게 처음인데... 등수에 왜 이리 사람이 없는거죠??
-
현역으로 물1지1 봤는데 4등급 3등급 받았음 그래서 탐구 바꿀라는데 일단 물리는...
-
사탐 추천 좀 2
초단기간 개념완성 가능한 과목으로
-
쫓기는 마음 5
지친 몸
-
고려대 3~4칸 쓸 건데 표본 분석해주실 분 구함 붙으면 바로 200입금함
-
난 못해도 5이상으로 쓸거임.. 작년에 재수 망해서 4이하로 갈겼더니 3떨함ㅋㅋㅋ...
-
ㄷㄷㄷㄷㄷㄷㄷㄷㄷ
-
비타민 먹고싶다 0
새벽이라 그런가 별 이상한게 다 땡기네
-
"여회원, 체위 바꾸면 허리 통증"…'실적 1위' 트레이너 남편, 노하우 파일 '충격' 5
(서울=뉴스1) 소봄이 기자 = '회원 수 1위' 헬스장 간판 트레이너 남편의 특급...
-
자기 상황에 따라 골라보셈
-
돌아왔구나 나자신.. 겜창에삶
-
대답.
-
3시 2
일어나자마자게 몸무게 측정했더니 46..
-
대구라이팅ㅇㅈㄹㅋㅋㅋㅋㅋ
-
중약 앞순위부터 지방의치는 기본으로 버리고 중약 1순위네요.... 지방 안가겠다는...
-
대학 다니다가 오랜만에 이번에 메디컬 이슈로 수능보게 됐는데 정시 원서를...
-
뉴런 문제 10문재 풀면 5문제 정도 막히고 생각 오래 가지면 풀리고 3문제 정도...
-
결국 낙지만 보는 듯 컨설팅 안 받는한
-
구라일까 진짜일까
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ