一只鱼在屏蔽上游的代码实现 键盘控制


#include <windows.h>
#include "HGE/include/hge.h"
#include "HGE/include/hgesprite.h"
#include "HGE/include/hgefont.h"
#include "HGE/include/hgeanim.h"
#include "HGE/include/hgegui.h"
#include "HGE/FontCN/Sprites.h"

 


HGE *hge = 0;
hgeFont*   fnt;//hgeFont is a HGE helper class for rendering text with bitmap fonts.
hgeAnimation*       player_pic;//创造一个动画类

 

HTEXTURE   tex1;//创造一个空闲的纹理
//HTEXTURE: 这是HGE中定义的一个数据类型,用来保存我们加载的图像,Texture的意思是“纹理”,说白了就是图片

float x=100.0f, y=100.0f;//精灵的坐标
float dx=0.0f, dy=0.0f;//精灵的宽和高
float Rot=0;

float OverturnW=1;//放大的宽
float OverturnH=1;//放大的高

#define   FaceLeft          1 //面向左
#define   FaceRight         0 //面向右
#define   FaceUp   1 //面向上
#define   FaceDown          0 //面向下
 
int     FaceDirectionX;    //面对方向     
int  FaceDirectionY;   //面对方向

const float speed=350;//速度


void InitFont();

FontSprite* gdifont = NULL;
FontSprite* typefont = NULL;

const wchar_t* lpString = L""
L"hgeAnimation动画精灵类演示。by 小强。/n"
L"请使用键盘的←↑→键控制小鱼,按空格键放大缩小,按CTRL键旋转。/n";

 


bool FrameFunc()
{
 float dt=hge->Timer_GetDelta();//返回最后一次调用框架的时间。
 player_pic->Update(dt);//更新动画

 


 // 检查ESC键是否已经被按下:
 if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true;//如果按下ESC键退出程序

 if (hge->Input_GetKeyState(HGEK_LEFT)) //如果按下<--键
 {
  x-=speed*dt; //x=速度*返回最后一次调用框架的时间
  if(!FaceDirectionX==FaceLeft)//如果面不朝左
  {
   if(!Rot==0) Rot=0.0f;//ROT不等于零的时候将Rot再设为0
   FaceDirectionX=FaceLeft;//将面朝向左
   OverturnW*=-1;   //反转图象
   x-=70;//反转图象后要补回中心点的坐标(是你图片宽度的一半)
  }
 }
 if (hge->Input_GetKeyState(HGEK_RIGHT))
 {
  x+=speed*dt;
  if(!FaceDirectionX==FaceRight)
  {

   if(!Rot==0) Rot=0.0f;
   FaceDirectionX=FaceRight;
   OverturnW*=-1;   //反转图象
   x+=70;//反转图象后要补回中心点的坐标(是你图片宽度的一半)
  }
 }
 if (hge->Input_GetKeyState(HGEK_UP)) y-=speed*dt; //上移 y=y-(速度*返回最后一次调用框架的时间)
 if (hge->Input_GetKeyState(HGEK_DOWN)) y+=speed*dt;//下移 y=y+(速度*返回最后一次调用框架的时间)

 

 //按空格键放大缩小1.2倍
 if (hge->Input_KeyDown(HGEK_SPACE)) //如果按下空格键
 {
  OverturnW=OverturnW*1.2f;
  OverturnH=OverturnH*1.2f;
  if(OverturnW>2.0f) {OverturnW=0.2f;OverturnH=0.2f;}
 }


 //按CTRL键旋转+
 if (hge->Input_GetKeyState(HGEK_CTRL)) //如果按钮旋转键
 {
  Rot+=50*dt*M_PI/180;
 }

 //按ALT键旋转-
 if (hge->Input_GetKeyState(HGEK_ALT))
 {
  Rot-=50*dt*M_PI/180;
 }

 // 控制小鱼不能超出窗体屏幕
 if(x>800) {x=800;}
 if(x<0) {x=0;}
 if(y>509) {y=509;}
 if(y<0) {y=0;}


 if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true;
 return false;
}

//渲染
bool RenderFunc()
{

 hge->Gfx_BeginScene();//开始渲染图形
 hge->Gfx_Clear(0);//清楚渲染目标(场景或者纹理)并释放z-buffer
 player_pic->RenderEx(x, y, Rot, OverturnW, OverturnH);//使用比例缩放和旋转将精灵描绘到屏幕上
    /*
    Parameters参数
x
Screen x-coordinate to render the sprite at. 描绘精灵到屏幕x坐标
y
Screen y-coordinate to render the sprite at. 描绘精灵到屏幕y坐标
rot
Sprite rotation in radians. 精灵旋转弧度
hscale
Horizontal scaling factor. 1.0 means default size. If omitted, no scaling will be applied. 水平缩放因素。1.0为默认大小。如果省略,就应用为不缩放
vscale
Vertical scaling factor. 1.0 means default size. If = 0.0 or omitted, hscale is used for both horizontal and vertical scaling. 垂直缩放因素。1.0为默认大小。如果等于0.0或者省略,就应用hscale为水平和垂直缩放

    */
 fnt->printf(15, 15, HGETEXT_LEFT, "dt:%.3f/nFPS:%d (constant)", hge->Timer_GetDelta(), hge->Timer_GetFPS()); //返回最近的frames-per-second速率
    //输入X,Y坐标,排版格式,内容
 gdifont->Printf(10,530,lpString);              // 使用像素字体输出
    //像素字体输入
 //typefont->Printf(10,300,lpString);           // 使用矢量字体输出
 hge->Gfx_EndScene();//结束渲染
 return false;
}

 

//windows应用程序入口点
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
 hge = hgeCreate(HGE_VERSION);

 

 //hge->System_SetState(HGE_LOGFILE, "Game.log");    //生成日志
 hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);     //设置回调
 hge->System_SetState(HGE_RENDERFUNC, RenderFunc);   //设置渲染回调
 hge->System_SetState(HGE_TITLE, "fishmove");     //设置窗口标题
 hge->System_SetState(HGE_WINDOWED, true);         //是否是窗口模式,默认是 800x600
 hge->System_SetState(HGE_USESOUND, false);          //使用声音资源
 hge->System_SetState(HGE_DONTSUSPEND, true);        //丢失焦点后,游戏还在后台运行
 hge->System_SetState(HGE_SHOWSPLASH, false);        //HGE开始的去掉LOGO

    // 初始化
 if(hge->System_Initiate())
 {
  //读图
  tex1=hge->Texture_Load("fish01_01.png");
  if(!tex1)
  {
   // 读图错误时
   MessageBox(NULL, "读取图片错误", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
   hge->System_Shutdown();
   hge->Release();
   return 0;
  }

  player_pic = new hgeAnimation(tex1,20,20,0,0,139,91);
        /*
        Parameters参数
tex
Handle of the texture holding animation frames. 动画帧持有的材质句柄
nframes
Number of animation frames. 动画帧数
FPS
Animation playback speed in frames per second. 动画播放速度,每秒的帧数
x
Texture x-coordinate of the first animation frame in texels. 材质在第一个动画帧的X轴坐标
y
Texture y-coordinate of the first animation frame in texels. 材质在第一个动画帧的Y轴坐标
w
Animation frame width. 动画帧的宽度
h
Animation frame height. 动画帧的高度
Remarks注释
The animation frames are expected to be placed in texture consecutively left-to-right, top-to-bottom. If there is no space for the next frame to the right from the current one, the next frame is expected to be found one row lower, starting at x-coordinate = 0. 动画帧是在材质中连续的从左到右,从上到下被放置。如果当前帧向右为下一帧没有空间,下一帧将在下排中起始位置(也就是X轴坐标为0)放置


        */
  player_pic->SetMode(HGEANIM_LOOP); //循环播放
  player_pic->Play();//开始播放

  
  // 设置小鱼面向的方向
  FaceDirectionX=FaceLeft;
  FaceDirectionY=FaceUp;

  
  fnt=new hgeFont("font1.fnt");
  InitFont();


  // 运行
  hge->System_Start();


  //释放资源
  delete fnt;
  delete player_pic;
  hge->Texture_Free(tex1);
  gdifont->Release();
  typefont->Release();

 }
 else
 { 
  // 返回错信息
  MessageBox(NULL, hge->System_GetErrorMessage(), "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
 }

 
 hge->System_Shutdown();    // hge停止

 // 析放资源
 hge->Release();

 return 0;
}

 

void InitFont()
{
 // 设置像素字体
 gdifont = FontSprite::Create("宋体",18);           // 创建像素字体指针
 gdifont->SetColor(0xFF42DB42);                     // 设置像素字体颜色


 // 设置矢量字体文件路径
 char sTTFont[256];
 GetWindowsDirectory(sTTFont,255);//获取windows所在目录 填充到sTTFont
 //strcat(sTTFont,"//fonts//SIMSUN.TTC");   //"宋体"
 //strcat(sTTFont,"//fonts//SIMHEI.TTF");   //"黑体"
 strcat(sTTFont,"//fonts//SIMKAI.TTF");    //"楷体"
    //strcat():Append a string
 typefont = FontSprite::CreateEx(sTTFont,18);    // 创建矢量字体指针
 typefont->SetColor(0xFFFFFF00);                    // 设置矢量字体颜色

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于生信分析案例种类繁多,无法一一列举所有的R代码。以下是一个简单的RNA-seq数据分析案例,供参考: 1. 导入数据并进行质控 ```R library(DESeq2) # 导入表达矩阵 counts <- read.table("counts.txt", header=TRUE, row.names=1) # 导入样本信息 colData <- read.table("sample_info.txt", header=TRUE, row.names=1) # 创建DESeq2对象 dds <- DESeqDataSetFromMatrix(countData=counts, colData=colData, design=~condition) # 进行质控 plotPCA(rlog(dds), intgroup="condition") plotHeatmap(counts(dds), cluster_rows=TRUE) ``` 2. 进行差异表达分析 ```R # 进行差异表达分析 dds <- DESeq(dds) # 获取差异表达基因 res <- results(dds) # 过滤p值和fold change res_sig <- subset(res, padj < 0.05 & abs(log2FoldChange) > 1) # 导出差异表达基因列表 write.table(res_sig, "DE_genes.txt", sep="\t", quote=FALSE) ``` 3. 进行富集分析 ```R # 导入基因列表和物种信息 gene_list <- read.table("DE_genes.txt", header=TRUE, row.names=1) species <- "Homo sapiens" # 进行富集分析 library(clusterProfiler) enrich_res <- enrichGO(gene_list=row.names(gene_list), OrgDb=org.Hs.eg.db, keyType="SYMBOL", universe=row.names(counts), ont="BP", pvalueCutoff=0.05, qvalueCutoff=0.2, readable=TRUE) # 导出富集分析结果 write.table(as.data.frame(enrich_res), "enrichment_results.txt", sep="\t", quote=FALSE, row.names=FALSE) ``` 4. 进行基因表达量可视化 ```R # 绘制基因表达量热图 library(pheatmap) pheatmap(counts, cluster_rows=TRUE, show_rownames=FALSE) # 绘制差异表达基因的表达量热图 library(RColorBrewer) cols <- colorRampPalette(brewer.pal(9, "Set1"))(length(levels(factor(colData$condition)))) pheatmap(counts[row.names(res_sig),], cluster_rows=TRUE, show_rownames=FALSE, col=cols) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值