别踩白块c语言程序编译
2个回答
展开全部
只是禅模式的,如果是学习用的,知道一个模式的应该其他也会了,如果是想玩的话下正版吧= =
#include "SDL2/SDL.h"
#include "SDL2/SDL_ttf.h"
#include<string.h>
// 使用的头文件
int W; // 窗口宽
int H; // 窗口高
int PH; // 游戏区的高
int i, df = 0; // 定义的变量
char sorry[] = "游戏不适合你的手机", win[9] = "You win!", lose[10] =
"You lose", str[19] = "得分:";
Uint32 began = 0;
float time = 0.0; // 定义的计时变量
bool quit = false; // 退出标志
float X = 0, Y = 0; // 用于获取触控位置的坐标
SDL_Event event;
// 定义一个事件
SDL_Window *w = NULL; // 创建一个窗口指针
SDL_Renderer *ren = NULL; // 创建一个渲染器指针
SDL_Surface *sur = NULL; // 表面
SDL_Surface *sur1 = NULL; // 得分表面
SDL_Surface *text = NULL; // 标题文本区表面
SDL_Texture *tex = NULL; // 画刷
SDL_Texture *tex1 = NULL; // 画刷
SDL_Texture *tex2 = NULL; // 画刷
TTF_Font *font = NULL; // 定义一个字体
SDL_Color color, fontcolor; // 定义字体颜色
SDL_Rect rect[4]; // 屏幕出现的四个黑块
SDL_Rect title; // 标题区
SDL_Rect pp, over;
void change(); // 使方块动起来
void init(); // 启动sdl及相关
void draw(); // 画图
void start(); // 初始化相关数据
void end(); // 游戏结尾
int main(int argc, char **argv)
{ // 主函数
init();
start();
began = SDL_GetTicks(); // 得到开始时间
while (quit == false)
{
draw(); // 画图
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_FINGERDOWN:
X = event.tfinger.x * W;
Y = event.tfinger.y * H;
// 获取x,y的坐标
if (Y > rect[0].y)
if ((X > rect[0].x) && (X < (W / 4 + rect[0].x))) // 判断坐标
{
change();
df = df + 1;
}
else // 如果触屏位置不对
{
quit = true;
if (df < 3)
sur1 = TTF_RenderUTF8_Blended(font, sorry, color);
else
sur1 = TTF_RenderUTF8_Blended(font, lose, color);
}
break;
case SDL_FINGERUP:
break;
default:;
}
if (df > 100) // 如果在30秒内得分超过100
{
quit = true;
sur1 = TTF_RenderUTF8_Blended(font, win, color);
}
}
time = 30 - ((SDL_GetTicks() - began) / 1000); // 计算剩余时间
if (time == 0.0) // 当时间结束
{
quit = true;
sprintf(str, "时间到,得分:%d", df);
sur1 = TTF_RenderUTF8_Blended(font, str, color);
}
}
tex1 = SDL_CreateTextureFromSurface(ren, sur1); // 把表面转换成画刷
SDL_RenderCopy(ren, tex1, NULL, &over);
SDL_RenderPresent(ren);
SDL_Delay(3000); // 暂停3秒
end();
return 0;
}
void change()
{
for (int i = 0; i < 3; i++)
rect[i].x = rect[i + 1].x;
rect[3].x = (random() % 4) * W / 4; // 最上层产生随机的黑块
}
void init()
{
SDL_Init(SDL_INIT_EVERYTHING);
w = SDL_CreateWindow("别踩白块儿", 0, 0, W, H, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS); // 配置窗口参数并创建
//
//
ren = SDL_CreateRenderer(w, -1, SDL_RENDERER_PRESENTVSYNC); // 为创建的窗口配置渲染器
TTF_Init(); // 启动font
font = TTF_OpenFont("/system/fonts/DroidSansFallback.ttf", 60); // 打开系统自带字体并设置大小为60
}
void draw()
{
sur = SDL_CreateRGBSurface(0, W, H, 32, 0, 0, 0, 0); // 先把表面刷白
SDL_FillRect(sur, NULL, 0xffffff);
for (int i = 0; i < 4; i++)
SDL_FillRect(sur, &rect[i], 0x00000); // 再把黑块逐个贴上表面
tex = SDL_CreateTextureFromSurface(ren, sur); // 把表面转换成画刷*/
sprintf(str, "得分:%d", df);
sur1 = TTF_RenderUTF8_Blended(font, str, color);
tex1 = SDL_CreateTextureFromSurface(ren, sur1); // 把表面转换成画刷
sprintf(str, "时间:%.2f\"", time);
text = TTF_RenderUTF8_Blended(font, str, fontcolor);
tex2 = SDL_CreateTextureFromSurface(ren, text); // 把表面转换成画刷
SDL_RenderCopy(ren, tex, NULL, NULL);
SDL_RenderCopy(ren, tex2, NULL, &title);
SDL_RenderCopy(ren, tex1, NULL, &pp);
SDL_RenderPresent(ren);
SDL_FreeSurface(sur);
SDL_DestroyTexture(tex);
SDL_FreeSurface(sur1);
SDL_FreeSurface(text);
SDL_DestroyTexture(tex1);
SDL_DestroyTexture(tex2);
}
void start()
{
SDL_GetWindowSize(w, &W, &H); // 得到屏幕分辨率
PH = H * 7 / 8;
color =
{
255, 215, 0};
fontcolor =
{
0, 0, 0}; // 字体颜色赋值
float a = PH * 3 / 4 + H / 8;
float wight = W / 4;
float hight = PH / 4;
rect[0].x = 0;
rect[0].y = a;
rect[1].x = wight;
rect[1].y = a - hight;
rect[2].x = wight * 2;
rect[2].y = a - 2 * hight;
rect[3].x = 3 * wight;
rect[3].y = a - 3 * hight;
for (int i = 0; i < 4; i++)
{ // 为黑块的高和宽赋值
rect[i].h = hight;
rect[i].w = wight;
}
title =
{
1.10, 0, W / 2, W / 8};
pp =
{
W / 2, 0, W / 2, W / 8};
over =
{
0, H / 4, W, H / 4};
}
void end()
{
TTF_CloseFont(font);
TTF_Quit();
#include "SDL2/SDL.h"
#include "SDL2/SDL_ttf.h"
#include<string.h>
// 使用的头文件
int W; // 窗口宽
int H; // 窗口高
int PH; // 游戏区的高
int i, df = 0; // 定义的变量
char sorry[] = "游戏不适合你的手机", win[9] = "You win!", lose[10] =
"You lose", str[19] = "得分:";
Uint32 began = 0;
float time = 0.0; // 定义的计时变量
bool quit = false; // 退出标志
float X = 0, Y = 0; // 用于获取触控位置的坐标
SDL_Event event;
// 定义一个事件
SDL_Window *w = NULL; // 创建一个窗口指针
SDL_Renderer *ren = NULL; // 创建一个渲染器指针
SDL_Surface *sur = NULL; // 表面
SDL_Surface *sur1 = NULL; // 得分表面
SDL_Surface *text = NULL; // 标题文本区表面
SDL_Texture *tex = NULL; // 画刷
SDL_Texture *tex1 = NULL; // 画刷
SDL_Texture *tex2 = NULL; // 画刷
TTF_Font *font = NULL; // 定义一个字体
SDL_Color color, fontcolor; // 定义字体颜色
SDL_Rect rect[4]; // 屏幕出现的四个黑块
SDL_Rect title; // 标题区
SDL_Rect pp, over;
void change(); // 使方块动起来
void init(); // 启动sdl及相关
void draw(); // 画图
void start(); // 初始化相关数据
void end(); // 游戏结尾
int main(int argc, char **argv)
{ // 主函数
init();
start();
began = SDL_GetTicks(); // 得到开始时间
while (quit == false)
{
draw(); // 画图
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_FINGERDOWN:
X = event.tfinger.x * W;
Y = event.tfinger.y * H;
// 获取x,y的坐标
if (Y > rect[0].y)
if ((X > rect[0].x) && (X < (W / 4 + rect[0].x))) // 判断坐标
{
change();
df = df + 1;
}
else // 如果触屏位置不对
{
quit = true;
if (df < 3)
sur1 = TTF_RenderUTF8_Blended(font, sorry, color);
else
sur1 = TTF_RenderUTF8_Blended(font, lose, color);
}
break;
case SDL_FINGERUP:
break;
default:;
}
if (df > 100) // 如果在30秒内得分超过100
{
quit = true;
sur1 = TTF_RenderUTF8_Blended(font, win, color);
}
}
time = 30 - ((SDL_GetTicks() - began) / 1000); // 计算剩余时间
if (time == 0.0) // 当时间结束
{
quit = true;
sprintf(str, "时间到,得分:%d", df);
sur1 = TTF_RenderUTF8_Blended(font, str, color);
}
}
tex1 = SDL_CreateTextureFromSurface(ren, sur1); // 把表面转换成画刷
SDL_RenderCopy(ren, tex1, NULL, &over);
SDL_RenderPresent(ren);
SDL_Delay(3000); // 暂停3秒
end();
return 0;
}
void change()
{
for (int i = 0; i < 3; i++)
rect[i].x = rect[i + 1].x;
rect[3].x = (random() % 4) * W / 4; // 最上层产生随机的黑块
}
void init()
{
SDL_Init(SDL_INIT_EVERYTHING);
w = SDL_CreateWindow("别踩白块儿", 0, 0, W, H, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS); // 配置窗口参数并创建
//
//
ren = SDL_CreateRenderer(w, -1, SDL_RENDERER_PRESENTVSYNC); // 为创建的窗口配置渲染器
TTF_Init(); // 启动font
font = TTF_OpenFont("/system/fonts/DroidSansFallback.ttf", 60); // 打开系统自带字体并设置大小为60
}
void draw()
{
sur = SDL_CreateRGBSurface(0, W, H, 32, 0, 0, 0, 0); // 先把表面刷白
SDL_FillRect(sur, NULL, 0xffffff);
for (int i = 0; i < 4; i++)
SDL_FillRect(sur, &rect[i], 0x00000); // 再把黑块逐个贴上表面
tex = SDL_CreateTextureFromSurface(ren, sur); // 把表面转换成画刷*/
sprintf(str, "得分:%d", df);
sur1 = TTF_RenderUTF8_Blended(font, str, color);
tex1 = SDL_CreateTextureFromSurface(ren, sur1); // 把表面转换成画刷
sprintf(str, "时间:%.2f\"", time);
text = TTF_RenderUTF8_Blended(font, str, fontcolor);
tex2 = SDL_CreateTextureFromSurface(ren, text); // 把表面转换成画刷
SDL_RenderCopy(ren, tex, NULL, NULL);
SDL_RenderCopy(ren, tex2, NULL, &title);
SDL_RenderCopy(ren, tex1, NULL, &pp);
SDL_RenderPresent(ren);
SDL_FreeSurface(sur);
SDL_DestroyTexture(tex);
SDL_FreeSurface(sur1);
SDL_FreeSurface(text);
SDL_DestroyTexture(tex1);
SDL_DestroyTexture(tex2);
}
void start()
{
SDL_GetWindowSize(w, &W, &H); // 得到屏幕分辨率
PH = H * 7 / 8;
color =
{
255, 215, 0};
fontcolor =
{
0, 0, 0}; // 字体颜色赋值
float a = PH * 3 / 4 + H / 8;
float wight = W / 4;
float hight = PH / 4;
rect[0].x = 0;
rect[0].y = a;
rect[1].x = wight;
rect[1].y = a - hight;
rect[2].x = wight * 2;
rect[2].y = a - 2 * hight;
rect[3].x = 3 * wight;
rect[3].y = a - 3 * hight;
for (int i = 0; i < 4; i++)
{ // 为黑块的高和宽赋值
rect[i].h = hight;
rect[i].w = wight;
}
title =
{
1.10, 0, W / 2, W / 8};
pp =
{
W / 2, 0, W / 2, W / 8};
over =
{
0, H / 4, W, H / 4};
}
void end()
{
TTF_CloseFont(font);
TTF_Quit();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询