//*****************************************************************
// Silple Race Ver 0.1
// Made by 'k-net 9th' Jae-Dong
// E-Mail: pjd@kw.ac.kr
// Download by http://www.codefans.net
//*****************************************************************
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <math.h>
//*******************
// 상수 선언
//*******************
#define CONSOL_WIDTH 80
#define CONSOL_HEIGHT 24
#define EXT_KEY 0xffffffe0 //확장키 인식값
#define KEY_LEFT 0x4b
#define KEY_RIGHT 0x4d
//*******************
// 구조체 선언
//*******************
struct CAR{
char name[16];
int max_spd;
int energy;
int accel;
};
//*******************
//전역 변수 선언
//*******************
char player_name[20]={"NoName"};
float player_score=0;
int player_energy=99;
double player_speed=1;
int player_carnum=9; //루프진입을 위하여 초기값을 지정함
float player_accel;
struct CAR cardata[5];
int road_index,next_index;
int player_carpos=20; //현재 자동차의 위치
char video_buf[CONSOL_HEIGHT][CONSOL_WIDTH+1]; //프로그램에서는 이 배열에 변경할 화면을 갱신한다.
int speed_counter=0; //부딧히지 않고 진행하는지 체크하기위함
static char road[22][2]={15,30,15,30,15,30,15,30,15,30,15,30,15,30,15,30,15,30,15,30,15,30,15,30,
15,30,15,30,15,30,15,30,15,30,15,30,15,30,15,30,15,30,15,30}; //road[?][0]이 left, road[?][1]이 right
char car[5][5][9]={".-TTTT-.",
"0-++++-0",
" I▦I ",
"[]+--+[]",
" Y--Y ",
"._|__|_.",
"()┫┣()",
" IⅩI ",
"(||)(||)",
" ^ ^ ",
" ┳┳ ",
"[]╋╋[]",
" [Ξ] ",
"◐::::◑",
" ∇∇ ",
"┏━━┓",
"◁ ▷",
"◁ ◎ ▷",
"◀ ▶",
"┗∩∩┛",
" ∞┯∞ ",
"▥←→▥",
" [★] ",
"▥§§▥",
" ↙↘ ",};
//*********************
//함수 proto type 선언
//*********************
int init();
int video_refresh();
int show_logo();
int show_car(int move); //게임중 화면에 자동차를 표시한다. -1은 왼쪽으로 1은 오른쪽으로
int show_carxy(int carnum,int x,int y);
int show_gameframe(); //게임화면의 외곽선을 그린다.
int show_stat(); //게임화면의 점수와 속도와 에너지를 갱신할때 사용
int show_road();
int show_count();
int show_gameover();
int gotoxy(int x,int y);
int input_player_data();
int strike_check(); //자동차와 도로와 충돌했는지 검사하고 충돌시 충돌부분을 화면에 출력
int main(int argc, char* argv[])
{
double delay;
int frame=0;
int i;
char key_temp;
init();
show_logo();
input_player_data();
system("cls");
player_energy = cardata[player_carnum].energy;
show_gameframe();
show_stat();
show_count();
player_accel = (float) cardata[player_carnum].accel/10;
for(i=0;i<=200000;i++) //게임시작
{
if(kbhit())
{
key_temp = getche();
if(key_temp == EXT_KEY)
{
key_temp = getche();
gotoxy(0,24);
putchar(' ');
switch(key_temp)
{
case KEY_LEFT:
show_car(-1);
player_speed -=1;
strike_check();
break;
case KEY_RIGHT:
show_car(1);
player_speed -=1;
strike_check();
break;
}
}
strike_check();
}
if(player_speed < 100)
player_speed += 2.7;
if(speed_counter > 6)
{
if(player_speed < 100)
{
player_speed = player_speed + (7.6 * player_accel);
}else if(player_speed < 200)
{
player_speed = player_speed + (1.2 * player_accel );
}else if(player_speed < 300)
{
player_speed = player_speed + ( 0.3 * player_accel );
}else if(player_speed < 315)
{
player_speed = player_speed + ( 0.1 * player_accel );
}else
{
player_speed = player_speed + ( 0.06 * player_accel );
}
if(player_speed>cardata[player_carnum].max_spd)
player_speed = cardata[player_carnum].max_spd;
}
delay = 350 - (351 * (1-exp(-player_speed/70)));
if(delay<0)
delay=0.01;
if(i%5==0)
{
player_score = (float)((player_score + player_speed/50)* 1.0003);
show_stat();
show_car(0);
show_road();
strike_check();
speed_counter++;
}
show_stat();
if(player_energy <=0)
{
show_gameover();
fflush(stdin);
scanf("%d",&i);
break;
}
gotoxy(10,24);
printf("delay: %10.2f",(float)delay);
gotoxy(0,24);
Sleep((unsigned int)delay);
}
gotoxy(2,2); //테스트용
return 0;
}
int show_logo()
{
int i;
int logo_delay=5;
system("cls");
gotoxy(4,2);
for(i=4;i<76;i++)
{
printf("*");
Sleep(logo_delay);
}
for(i=3;i<8;i++)
{
gotoxy(75,i);printf("*");
Sleep(logo_delay);
}
for(i=75;i>=4;i--)
{
gotoxy(i,7);
printf("*");
Sleep(logo_delay);
}
for(i=7;i>=3;i--)
{
gotoxy(4,i);printf("*");
Sleep(logo_delay);
}
Sleep(80);
gotoxy(32,4);
printf("☆ Simple Race ☆");
Sleep(80);
gotoxy(8,6);
printf("Ver 0.1");
Sleep(80);
gotoxy(56,6);
printf("Made By Jae-Dong");
show_carxy(0,13,15);
Sleep(200);
show_carxy(1,27,15);
Sleep(200);
show_carxy(2,41,15);
Sleep(200);
show_carxy(3,55,15);
Sleep(1000);
gotoxy(28,21);
printf("Please Press Any Key!");
getchar();
return 0;
}
int show_gameframe()
{
int i;
gotoxy(0,0);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓");
for(i=1;i<CONSOL_HEIGHT-1;i++)
{
gotoxy(0,i);
printf("┃");
gotoxy(56,i);
printf("┃");
gotoxy(78,i);
printf("┃");
}
gotoxy(0,CONSOL_HEIGHT-1);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━┛");
gotoxy(58,1);
printf(" Simple Racing");
gotoxy(58,2);
printf(" Ver 0.1");
gotoxy(58,3);
printf("━━━━━━━━━━");
gotoxy(58,4);
printf(" Name:");
gotoxy(58,5);
printf(" %17s",player_name);
gotoxy(58,6);
printf("━━━━━━━━━━");
gotoxy(58,7);
printf(" Score:");
gotoxy(58,9);
printf("━━━━━━━━━━");
gotoxy(58,10);
printf(" Energy:");
gotoxy(58,12);
printf("━━━━━━━━━━");
gotoxy(58,13);
printf(" Speed:");
gotoxy(58,14);
printf(" km/h ");
gotoxy(58,15);
printf(" RPM:");
gotoxy(58,17);
printf("━━━━━━━━━━");
gotoxy(61,18);
printf("--Car Info--");
gotoxy(59,19);
printf("Model :%s",cardata[player_carnum].name);
gotoxy(59,20);
printf("Max Spd: %d Km/h",cardata[player_carnum].max_spd);
gotoxy(59,21);
printf("Energy : %d",cardata[player_carnum].energy);
gotoxy(59,22);
printf("Accel : %d",cardata[player_carnum].accel);
return 0;
}
int show_stat()
{
int i,j;
static int recent_energy = 999,recent_rpm = 999,recent_speed = 999;
//score
gotoxy(58,8);
printf("%19.0f",player_score);
gotoxy(58,11);
if(recent_energy !=player_energy) //값에 변화가 있을때만 화면에 갱신
{
for(i=0,j=player_energy;i<10;i++)
{
if(j>=10)
printf("■");
else
printf("□");
j-=10;
}
}
if(recent_speed != player_speed)
{
gotoxy(58,14);
printf("%12.0f",player_speed);
}
//RPM
gotoxy(58,16);
j= (int) ((player_speed * 10) / cardata[player_carnum].max_spd );
if(j != recent_rpm) //값에 변화가 있을때만 화면에 갱신
{
for(i=0;i<10;i++)
{
if(j>i)
printf("■");
else
printf("□");
}
}
recent_rpm = j;
recent_energy = player_energy;
return 0;
}
int init()
{
int i,j;
road_index = 0;
next_index = 0;
for(i=0;i<CONSOL_HEIGHT;i++)
for(j=0;j<CONSOL_WIDTH;j++)
video_buf[i][j]=32;
video_refresh();
for(i=0;i<CONSOL_HEIGHT-1;i++) //화면출력 마지막 칸에 new line코드 삽입
video_buf[i][CONSOL_WIDTH]=(char)0x0d;
video_buf[i][CONSOL_WIDTH]=NULL;
//자동차 데이터 입력
sprintf(cardata[0].name,"Laser");
cardata[0].max_spd=350;
cardata[0].energy=70;
carda
saiche.rar_赛车
版权申诉
43 浏览量
2022-09-19
19:40:15
上传
评论
收藏 7KB RAR 举报
周楷雯
- 粉丝: 80
- 资源: 1万+
最新资源
- Anaconda3-2024.02-1-Windows-x86-64.exe
- stm32cubemx can通信 一个板子负责传感器采集 一个板子负责wifi传递到网页 网页可控制传感器板子.zip
- k8s集群搭建1.27.1版本(来源于图灵k8s笔记)
- 树莓派连接 DS18B20 温度传感器读取温度时监控客户端,服务器端连接状况,实现断线重连机制
- 小游戏-坦克大战,你认为的小游戏
- 最好用的富文本编辑器wangeditor
- jQuery 3.7.1
- 校园失物招领小程序源码可作毕业设计
- SAP客户端GUI740安装包(JAVA版本)
- winlibs-x86-64-posix-seh-gcc-13.2.0-llvm-16.0.6-mingw-w64msvcrt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈