热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GEC6818开发板制作五子棋小游戏

利用GEC6818开发板制作五子棋小游戏软件及版本:Ubuntu18.04.4,SecureCRT,SourceInsight4.0,VMwareWorkstationPro

利用GEC6818开发板制作五子棋小游戏

软件及版本:Ubuntu18.04.4,SecureCRT,Source Insight4.0,VMware Workstation Pro。

主要代码:

main.c

#include
#include "light.h"
#include "ev.h"
#include "bmp.h"
#include "game.h"
int x,y;
int main()
{
Lcd_Init();
Dis_pic("xiaqi.bmp");//封面图片
Get_ev(&x, & y);//开始操作
return 0;
}

bmp.h

#ifndef __BMP_H__
#define __BMP_H__
#include "light.h"
#include
#include "ev.h"
void Dis_pan();
int Dis_pic(char *pic);
//void Draw_Ck(int x0,int y0,int color);
#endif

bmp.c

#include "bmp.h"
#include "ev.h"
int Dis_pic(char *pic)
{
int fd = open(pic,O_RDONLY);
if(-1 == fd)
{
perror("open error");
return -1;
}
int width,height;
short depth;
lseek(fd,0x12,SEEK_SET);
read(fd,&width,4);
read(fd,&height,4);

lseek(fd,0x1c,SEEK_SET);
read(fd,&depth,2);
printf("%d %d %d\n",width,height,depth);
int laizi =( 4-(width * depth / 8) % 4) % 4;
unsigned char color_buf[height*(width*depth/8+laizi)];//32 24
char color_a = 0,color_r,color_g,color_b;//颜色分量
unsigned int color;//像素点的颜色
unsigned char *p = color_buf;
lseek(fd,0x36,SEEK_SET);
int r;
r=read(fd,color_buf,height*(width*depth/8+laizi));
printf("%d %d\n",r,height*(width*depth/8+laizi));
for(int i=height-1;i>=0;i--)
{
for(int j=0;j {
color_b= *p++;//b颜色
color_g= *p++;
color_r= *p++;
if(32 == depth)
{
color_a= *p++;
}
color = color_a <<24 | color_r <<16 |color_g <<8 | color_b;//屏幕需要的颜色a r g b
Display(color, j, i);
}
p+= laizi;
}
}
void Dis_pan()//棋盘
{
for(int i=0;i<480;i++)
{
for(int j = 0;j<800;j++)
{
if(i%40 == 0||j%40 == 0)
Display(0x00, j, i);
else
{
Display(0xffff, j, i);
}
}
}
}
/*void Draw_Ck(int x0,int y0,int color)
{
int flag;
for(int i= 0;i<480;i++)
{
for(int j=0;j<800;j++)
{
if((j-x0)*(j-x0)+(i-y0)*(i-y0)<=10*10)
{
if(flag)
Display(0x0000ff,j,i);
else
Display(0xffffff, j, i);
}
}
}
}*/

ev.h

#ifndef __EV_H__
#define __EV_H__
#include
#include
#include
#include
#include
#include
#include
#include
int Get_ev(int *x,int *y);
#endif

ev.c

#include "ev.h"
#include "bmp.h"
#include "game.h"
int Get_ev(int *x,int *y)
{
int flag=0;
int flag1=3;
int fd = open("/dev/input/event0",O_RDONLY);
if(-1 == fd)
{
perror("open error");
return -1;
}
struct input_event ev;
int x1,y1;

while(1)
{
read(fd,&ev,sizeof(ev));
printf("ev_type = %d code = %d value = %d\n",ev.type,ev.code,ev.value);
if(ev.type == EV_ABS)
{
if(ev.code == 0)//x
{
x1 = ev.value * 800/1024;

}
else
{
y1 = ev.value * 480/600;
}
}
if(ev.type == EV_KEY && ev.code == 330 && ev.value == 1)//保存初始左边
{
*x = x1;
*y = y1;
}
if(ev.type == EV_KEY && ev.code == 330 && ev.value == 0)
{
if(*x == x1 && *y == y1)//点击
{
printf("dianji\n");
if(flag1==1)
Game_Change(x1,y1);
if(flag1!=1)
{
Dis_pan();
flag1=1;
}
}
if(x1 > *x)//右滑
{
printf("youhua\n");
flag1=2;
}
if(x1 <*x)//左滑
{
printf("zuohua\n");

flag1=3;
}
Game_Over();
}
}
}

game.h

#ifndef __GAME_H__
#define __GAME_H__
#include
#include
#include
#include
#include
#include
#include
#include
int Game_Change();
int Dis_zi(int x,int y,int flag);
int Game_Over();
int clear();

#endif

game.c

#include "ev.h"
#include "bmp.h"
#include "game.h"
int flag= 0;
unsigned int Game_buf[12][20] = {0};
int Game_Change(int x,int y)
{
int i,j;
i = x % 40;
j = y % 40;
if(i > 20)
{
i = x / 40 + 1;
}
else
{
i = x / 40;
}
if(j > 20)
{
j = y / 40 + 1;
}
else
{
j = y / 40;
}
x = i * 40;
y = j * 40;
if(Game_buf[j][i]==0)
{
if(flag)
{
Game_buf[j][i]=1;
Dis_zi(y,x,flag);

}
else
{
Game_buf[j][i]=2;
Dis_zi(y,x,flag);
}
flag = ~flag;
}
}
int clear()
{
for(int a=0;a<12;a++)
{
for(int b = 0;b <20;b++)
{
Game_buf[a][b]=0;
}
}
}
int Dis_zi(int x,int y,int flag)
{
int i,j;
if(flag)
{
for(i=0;i<480;i++)
{
for(j=0;j<800;j++)
{
if((i-x)*(i-x)+(j-y)*(j-y)<=330)
{
Display(0x00,j,i);
}
}
}
}
else
{
for(i=0;i<480;i++)
{
for(j=0;j<800;j++)
{
if((i-x)*(i-x)+(j-y)*(j-y)<=330)
{
Display(0x00ffffff,j,i);
}
}
}
}
}
int Game_Over()
{
int a,b,h=1,s=1,x=1,j=1;
for(a = 0;a <12;a++)
{
for(b = 0;b<20;b++)
{
if(Game_buf[a][b]!=0)
{

while(h!=5)
{
if(Game_buf[a][b]==Game_buf[a+h][b])
h++;
else
break;
}
while(s!=5)
{
if(Game_buf[a][b]==Game_buf[a][b+s])
s++;
else
break;
}
while(x!=5)
{
if(Game_buf[a][b]==Game_buf[a+x][b+x])
x++;
else
break;
}
while(j!=5)
{
if(Game_buf[a][b]==Game_buf[a+j][b-j])
j++;
else
break;
}
if(h==5||s==5||x==5||j==5)
{
Dis_pic("bucuoo.bmp");
clear();
}
}
}
}
}

light.h

#ifndef __LIGHT_H__
#define __LIGHT_H__
#include
#include
#include
#include
#include
#include
#include
int Display(int color,int x,int y);
int Lcd_Init();
void Dis_wh();
void Dis_qu();
void Dis_cir();
void Dis_tri();
#endif

light.c

#include "light.h"
unsigned int *plcd =NULL;
#include "ev.h"
int Display(int color,int x,int y)
{
if(x >= 0 && x <= 800 && y >= 0 && y <= 480)
{
*(plcd + y*800+ x) = color;
}
}
int Lcd_Init()
{
int fd = open("/dev/fb0",O_RDWR);
if(-1==fd)
{
perror("open error");
return -1;
}
plcd =mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
}
void Dis_wh()
{
for(int i = 0;i <480;i++)
{
for(int j = 0;j <800;j++)
{
Display(0xffffff,j,i);
}
}

}
//画矩形
void Dis_qu()
{
for(int i= 100;i<300;i++)
{
for(int j=100;j<600;j++)
{
Display(0xffffff,j,i);
}
}
}
//圆形
void Dis_cir()
{
for(int i= 100;i<480;i++)
{
for(int j=100;j<800;j++)
{
if((j-350)*(j-350)+(i-200)*(i-200)<=100*100)
Display(0x00ffff,j,i);
if((j-400)*(j-400)+(i-275)*(i-275)<=100*100)
Display(0xff00ff,j,i);
if((j-450)*(j-450)+(i-200)*(i-200)<=100*100)
Display(0xffff00,j,i);
if(((j-350)*(j-350)+(i-200)*(i-200)<=100*100)&&((j-400)*(j-400)+(i-275)*(i-275)<=100*100)&&((j-450)*(j-450)+(i-200)*(i-200)<=100*100))
Display(0xff0000,j,i);
}
}
}
void Dis_tri()
{
for(int i = 0;i<480;i++)
{
for(int j = 0;j<800;j++)
{
if(i+j<=400)
Display(0xff00ff,j,i);
}
}
}
/*
void Dis_tri()
{
for(int y = 0;y<480;y++)
{
for(int x = 0;x<800;x++)
{
if(x>=100 && y<=300 && y>=100 && y<=-x+400&& y>=x)
Display(0xff00ff,x,y);
}
}
}
*/
/*int main()
{
Lcd_Init();
Dis_wh();
//Dis_wh();
//Dis_qu();
//Dis_cir();
Dis_tri();

return 0;

}*/

代码完成后在Ubuntu控制台终端进行验证 。

代码验证无误后,通过SecureCRT将其烧录到GEC6818开发板当中。

最后即可在GEC6818开发板上实现五子棋小游戏。 


推荐阅读
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • Python网络编程:深入探讨TCP粘包问题及解决方案
    本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 编程解析:CF989C 花朵之雾 (构造算法)
    本文深入探讨了CF989C '花朵之雾'问题的构造算法,提供了详细的解题思路和代码实现。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
author-avatar
小丁啊小丁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有