컴공러가심심해서만든2048게임C코드
#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를 선물하세요.
-
늘있는 WWE 2
유저들 e탈 무서워 e악물고 무시해보려고하지만
-
라인 좀 봐주실분... 진학사 기준으로 홍대 경영 추합, 동대 대부분 적정, 외대...
-
본인 커리어하이 2309 공통다맞 선택1틀 백분위100 24수능 1등급 둘다 언매임...
-
아싸라 누구 만나기 부끄러워서 한번도 못나감 근데 에만추는 해봄,,,에타에서 중고로...
-
제발 와달라고 모셔 감?
-
심히 고민 중.
-
이대 질문…. 0
1. 단과대 수석하면 등록금 전액이고 과 수석해도 등록금 전액이라던데 단과대...
-
당근에서
-
김범준 좋나요? 3
현강 좋다고 듣긴 했는데, 인강에서도 듣기 좋을까요?
-
뭔가 아 어디서 쎄한데 하면 꼭 그 종류에 대해서 약하게라도 뭔 사건이 터짐
-
대학 쓸 곳도 없는데 지금 군입대,4수,아니면 개망했는데도 대학을 좀 가보기 이...
-
화작 다맞 86 / 미적 3틀 76 둘중에 하나라도 2 뜰 수 있을까요ㅠㅠ
-
이메일 아이디 만들라고 하는데 단어 선택 고민입니다 단어 care , seed ,...
-
활동 소개 영상에서 활동 내용을 알 수 없을 수 있다고 주장하던데 활동 소개라는 말...
-
본가에서 할것도 없고
-
흠..
-
글엔 카페에 글쓰라는 내용 안보이던데 입금했다고 카페에 글쓴분들이 많아서 헷갈리네;;
-
국숭세 제발… 7
너무 불안해서 그런데 이거 국숭세 과 낮추고 추합까지 봐도 어려운 점수인가요? ㅠㅠ..
-
현역 정시파이터입니다...^^ 국어 평소에 3은 뜨는데 5나왓고 한지도 9모...
-
재수 사탐런 4
평소에 모고보면 1 2등급에서 벗어나지 않았는데 이번수능에 34가 뜨네요...사탐뭘...
-
98이지만 다시 수능으로 돌아온 나이로 9수 (진)10수입니다 약대 목표로...
-
수능국어1등급
-
언매 1등급 4
언매 93점인데 1등급 뜨나요?? 공통3개 틀렸는데
-
어으.. 이제 방 정리 해야지
-
하
-
질적인 공부를 할 줄 모름 그냥 무지성 실모 무지성n제 국어영어조차무지성으로...
-
메가스터디 채점자 평균점수인데 보통 수능에서 메가스터디 채점자 언매 평균점수가...
-
이런 의도라면 정당하게 시험 잘본 학생들은 수시 카드하나 날리는데 그피해를...
-
고속 등급컷 0
고속등급컷 다른곳보다 낮게나오던데 이거 아직 수정전이라그런거죠? 사문 표점...
-
근데 진학사 1
작년컷으로 지금 산출하고있다는거 팩트임? 그랬으면 좋겠는데.. 근거가 어딨음???...
-
구겅구겅구겅 0
강기분 조아
-
보고싶은 애니들 볼륨이 다 ㅈㄴ 크네
-
문만 시즌 start 정답은 하루 이틀 뒤에
-
https://orbi.kr/00069789715/ 이것처럼 분석해 드립니다...
-
강민철 현강 1
신청 많이 빡센가요? 콘서트 티켓팅마냥 네이비즘 켜놓고 대기해야할정도인가요??
-
오백원에 팔면 팔릴까
-
그냥 무지성 륙군박치기 해야하나 .....
-
2023년 봄에 입대했고 25년 초 전역예정입니다. 입대 전에 봉사, 토익은...
-
수능 끝나고 심심할 여러분들을 위해.. 오르비 레전드 글들을 엄선해봤습니다....
-
깜짝놀람 8학군 상산고 자사고 ㅈ반고 나발이고 다 같이 재수각재는중ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 레전드네 진짜
-
백분위 97뜰만할까요???
-
통칭 의치한약수의 장점은 ㅈ같으면 때려치면 된다 << 이걸로 요약됨 개원 개국...
-
단과 신청을 왜 수능전에 받아 ㅅㅂ 재수생은 재수 생각하고 미리 신청하라는거냐 ㅅㅂ
-
냥☆
-
. . 저런... 고민하던 사이에 어떤 기만자가 “현역“과 “카이스트“를 둘 다...
-
2월에 공군 입대 예정인 서성한 인문 재학생이고 현역때는 4,5섞인 등급이었고 재수...
-
ㅈㄱㄴ
-
내년 겨울방학 단과신청 하려고 하는데 언제 열리는지 아시는분 계실까요
-
공통 4틀 보다 불리한가요..??
점수계산도 해주세요!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
방학때 만든거기도 하고 더 건들기가 귀찮음!
후덜ㅠㅡㅜㅠ 뭉과인데 컴퓨터 배우고 싶네용ㅎㅎㄹ
왜 정보통신계열은 교차지원이 가능한가 궁금했었는데, 직접 배워보니 여태까지 배운 내용들은 전부 수1 개념이면 충분하더라구요 ㅋㅋ
우왕.. 꿈은 문과 분야에서 확고한 편이라 다음에 취미로 꼭 배워보려고요ㅎㅎ 수학은 그나마 희망적이네요..ㅋㅋㅋ간-단한 응용 프로그램 정도 손댈 수 있으려면 꽤 많이 공부해야 하려나요ㅎㅎ
네 ㅋㅋ 보통사람들이 인식하는 '프로그램'이라는 걸 만들려면 꽤 많이 이해하고 공부하고 연습해야해요 ㅎㅎ
제가 컴퓨터에 관심많아서 중학생때 혼자 c언어책 사서 따라하고 그랬는데
지금 독학재수생이거든요
재수목표가 고사국, 한양대 소프트, 성균관대 소프트 이 쪽을 목표로 했는데
만약 안된다면 컴공쪽도 생각하는데
컴퓨터공학과 하구 소프트웨어학과랑 배우는 과목이나 방향자체가 많이 다른가요?
제가 특히 보안쪽에 관심이 많거든요!!
일단 울학교 컴공과 소프트를 비교하자면, 배우는 과목의 차이가 거의 없습니다.
다만, 소프트는 장학금을 받으면서 기숙사 배정이 학점 기준 없이 바로 배정이 가능하고, 컴공보다는 조금 더 빨리 배우며, 방학 때 삼성에 불려가서 프로젝트 하면서 무언가 더 배우는게 있다고 합니다.
졸업한 뒤에 현업으로 뛰어들었을 때, 초기에는 소프트가 컴공보다는 더 적응력이 클 거 같네요 ㅋㅋ
실례지만, 서울이신가요? 수원이신가요? 제가 지원한 곳이라..
수학교육과, 컴퓨터교육과를 제외한 모든 자연계열 과는 수원에 있습니다
이과생인데 무슨 소리인지 모르겠다.
발 닦고 잠이나 자야겠다..
주무세요 ㅋㅋㅋ
오랜만에보네 샵인클루드 스트디오어이취
ㅋㅋㅋ