计算器示例
c4droid吧
全部回复
仅看楼主
level 1
Yuchsh88 楼主
/*
* 文件名称:Calculator.c
*
* 摘 要 :计算器示例源码,c4droid5.98 gcc sdl2 编译通过
*
*/
#include "SDL2/SDL.h"
/* 包含字体、图片、声音扩展库 */
#include "SDL2/SDL_ttf.h"
#include "SDL2/SDL_image.h"
#include "SDL2/SDL_mixer.h"
#include<string.h>
#define BUFLEN 50
#define WIDTH 1080
#define HEIGHT 1920
#define FRAME 24
char *background = "./resources/cal.png";
char *sound = "./resources/sound.wav";
char *fontpath = "./resources/ziti.ttf";
SDL_Window *Window = NULL;
SDL_Renderer *Render = NULL;
SDL_Texture *BackGroundTex = NULL;
Mix_Chunk *Chunk = NULL;
TTF_Font *FontTtf = NULL;
int Init() {
SDL_Init(SDL_INIT_EVERYTHING);
Window =
SDL_CreateWindow("Calculator", 0, 0, WIDTH, HEIGHT, SDL_WINDOW_FULLSCREEN);
Render = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED);
return 0;
}
void InitExt() {
SDL_Surface *Surface = NULL;
IMG_Init(IMG_INIT_PNG);
Surface = IMG_Load(background);
BackGroundTex = SDL_CreateTextureFromSurface(Render, Surface);
SDL_FreeSurface(Surface);
IMG_Quit();
Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096);
Chunk = Mix_LoadWAV(sound);
TTF_Init();
FontTtf = TTF_OpenFont(fontpath, 180);
}
void Text(char *String, int x, int y, SDL_Renderer * Render,
int r, int g, int b, int a) {
int w = 0, h = 0;
SDL_Color Color;
SDL_Rect RenderRect;
SDL_Surface *FontSur = NULL;
SDL_Texture *FontTex = NULL;
Color.r = r;
Color.g = g;
Color.b = b;
Color.a = a;
FontSur = TTF_RenderUTF8_Blended(FontTtf, String, Color);
FontTex = SDL_CreateTextureFromSurface(Render, FontSur);
SDL_FreeSurface(FontSur);
SDL_QueryTexture(FontTex, NULL, NULL, &w, &h);
RenderRect.x = x;
RenderRect.y = y;
RenderRect.w = w;
RenderRect.h = h;
SDL_RenderCopy(Render, FontTex, NULL, &RenderRect);
SDL_DestroyTexture(FontTex);
}
void QuitExt() {
TTF_CloseFont(FontTtf);
TTF_Quit();
Mix_FreeChunk(Chunk);
Mix_CloseAudio();
}
void Quit() {
SDL_DestroyTexture(BackGroundTex);
SDL_DestroyRenderer(Render);
SDL_DestroyWindow(Window);
SDL_Quit();
}
2018年01月27日 04点01分 1
level 1
Yuchsh88 楼主
只有简单的加减乘除功能,不会在用手机编程眼睛会瞎的。
2018年01月27日 05点01分 5
level 1
Yuchsh88 楼主
这里有源文件和apk,解压apk可以找到resources文件夹有需要的资源
2018年01月27日 07点01分 8
level 1
Yuchsh88 楼主
int q;
char str2[BUFLEN], str3[BUFLEN], str4[BUFLEN], sym[1], str[20];
SDL_Event event;
void Loop() {
static int i = 0;
float Tx, Ty;
float a, b, c;
Tx = 0;
Ty = 0;
sym[0] = 0;
memset(str3, 0, BUFLEN);
memset(str4, 0, BUFLEN);
if (SDL_PollEvent(&event)) {
if (event.type == SDL_FINGERDOWN) {
Tx = event.tfinger.x;
Ty = event.tfinger.y;
}
}
/* 按键第一列 */
if (Tx > 0 && Ty > 0.42 && Tx < 0.25 && Ty < 0.54) {
memset(str2, 0, BUFLEN);
} else if (Tx > 0 && Ty > 0.54 && Tx < 0.25 && Ty < 0.65) {
str2[i] = '7';
} else if (Tx > 0 && Ty > 0.65 && Tx < 0.25 && Ty < 0.77) {
str2[i] = '4';
} else if (Tx > 0 && Ty > 0.77 && Tx < 0.25 && Ty < 0.88) {
str2[i] = '1';
} else if (Tx > 0 && Ty > 0.88 && Tx < 0.25 && Ty < 1.0) {
// str2[i] = '%';
q = 1;
}
/* 按键第二列 */
else if (Tx > 0.25 && Ty > 0.42 && Tx < 0.42 && Ty < 0.54) {
str2[i] = '/';
} else if (Tx > 0.25 && Ty > 0.54 && Tx < 0.5 && Ty < 0.65) {
str2[i] = '8';
} else if (Tx > 0.25 && Ty > 0.65 && Tx < 0.5 && Ty < 0.77) {
str2[i] = '5';
} else if (Tx > 0.25 && Ty > 0.77 && Tx < 0.5 && Ty < 0.88) {
str2[i] = '2';
} else if (Tx > 0.25 && Ty > 0.88 && Tx < 0.5 && Ty < 1.0) {
str2[i] = '0';
}
/* 按键第三列 */
else if (Tx > 0.5 && Ty > 0.42 && Tx < 0.75 && Ty < 0.54) {
str2[i] = '*';
} else if (Tx > 0.5 && Ty > 0.54 && Tx < 0.75 && Ty < 0.65) {
str2[i] = '9';
} else if (Tx > 0.5 && Ty > 0.65 && Tx < 0.75 && Ty < 0.77) {
str2[i] = '6';
} else if (Tx > 0.5 && Ty > 0.77 && Tx < 0.75 && Ty < 0.88) {
str2[i] = '3';
} else if (Tx > 0.5 && Ty > 0.88 && Tx < 0.75 && Ty < 1.0) {
str2[i] = '.';
}
/* 按键第四列 */
else if (Tx > 0.75 && Ty > 0.42 && Tx < 1.0 && Ty < 0.54) {
if (i > 0)
str2[--i] = '\0';
} else if (Tx > 0.75 && Ty > 0.54 && Tx < 1.0 && Ty < 0.65) {
str2[i] = '-';
} else if (Tx > 0.75 && Ty > 0.65 && Tx < 1.0 && Ty < 0.77) {
str2[i] = '+';
} else if (Tx > 0.75 && Ty > 0.77 && Tx < 1.0 && Ty < 1.0) {
int j;
for (j = 0; j <= i; j++) {
if (str2[j] == '+' || str2[j] == '-' || str2[j] == '*' || str2[j] == '/') {
strncpy(str3, str2, j);
sym[0] = str2[j];
strncpy(str4, &str2[j + 1], i - (j + 1));
memset(str2, 0, BUFLEN);
break;
}
}
}
a = atof(str3);
b = atof(str4);
switch (sym[0]) {
case '+':
c = a + b;
sprintf(str2, "%.3f", c);
break;
case '-':
c = a - b;
sprintf(str2, "%.3f", c);
break;
case '*':
c = a * b;
sprintf(str2, "%.3f", c);
break;
case '/':
c = a / b;
sprintf(str2, "%.3f", c);
break;
}
i = strlen(str2);
if (i > 10)
memset(str2, 0, BUFLEN);
/* 按键按下播放声音 */
if (Tx > 0 && Ty > 0) {
Mix_PlayChannelTimed(1, Chunk, 0, -1);
}
/* 缓冲区显示 */
// Text(str2, 10, 200, Render, 255, 0, 0, 0);
}
int main(int argc, char *argv[]) {
int TimeStart = 0, TimeEnd = 0, f;
SDL_Thread *Thread;
Init();
InitExt();
while (1) {
SDL_RenderClear(Render);
/* 渲染界面 */
SDL_RenderCopy(Render, BackGroundTex, NULL, NULL);
Thread = SDL_CreateThread(Loop, "Loop", (void *)NULL);
// 等待线程运行完成
SDL_WaitThread(Thread, NULL);
// Loop();
if (q == 1)
break;
Text(str2, 10, 200, Render, 255, 0, 0, 0);
Text(str, 800, 10, Render, 255,0, 255, 0);
/* 屏幕更新函数 不要无视它的存在 */
SDL_RenderPresent(Render);
TimeEnd = SDL_GetTicks();
if ((TimeEnd - TimeStart) < (1000 / FRAME)) {
SDL_Delay((1000 / FRAME) - (TimeEnd - TimeStart));
}
TimeEnd = SDL_GetTicks();
f = 1000 / (TimeEnd - TimeStart);
memset(str, 0, 20);
sprintf(str, "%d", f);
TimeStart = SDL_GetTicks();
}
QuitExt();
Quit();
}
2018年01月27日 13点01分 9
1