注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

是直到最后都无法放手的一种气息,是我们生命中最后的思念……

 
 
 

日志

 
 

[转]原创!跟我用CC65学FC编程 3  

2009-06-05 23:24:43|  分类: FC网友经验 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

原创!跟我用CC65学FC编程!3!(2009-05-30 13:13:05)

来源 http://blog.sina.com.cn/s/blog_5e1afe9d0100drd0.html

作者任天行,转载请注明

上节课说了,这节课讲延时......

CC65的头文件定义了waitvblank()这个函数,没有参数......

注意这个函数不像PC或PSP上的一次是1毫秒,应该是20毫秒吧......

用法:

waitvblank();

这样就可以了......

为了以后使用方便,我们利用这个函数写一个函数,可以多次循环的延迟到我们需要的时间......

在main函数前面加上定义变量的

int a;

然后在main后面加上

int ys(int yssj)//延时
{
 for(a=0;a<=yssj;a++) 
 {
  waitvblank();
 }
 return 0;
}

这样就可以了,使用方法是:

a=ys(10);//延时11次

好了,这样就可以了......

下面我们讲按键识别.....

FC的按键识别方法是

手柄1在4016的位置,

手柄2在4017的位置,

为了使用明了,咱们替换一下

#define reg_joypad1 *(char*)0x4016

这样你打地址也行,打这个也行.....

你也可以用同样的方法定义手柄2,位置在4017........

然后让手柄复位,在对应的地址里写1,然后写0,手柄就复位了.......

reg_joypad1 = 1;
reg_joypad1 = 0;

然后手柄会逐个检查是否按键,顺序是A键,B键,SELECT,START,上,下,左,右......

像刚才一样在main前面定义

unsigned char ku, koldu;//上键
unsigned char kd, koldd;//下键
unsigned char kl, koldl;//左键
unsigned char kr, koldr;//右键
unsigned char ka, kolda;//A键
unsigned char kb, koldb;//B键
unsigned char ks, kolds;//START键
unsigned char ke, kolde;//SELECT键

这样,然后逐个检查

ka = reg_joypad1;
  if((ka == 0x1) && (kolda == 0x1))
  {
   //cprintf("A");
     break;

  }
  kb = reg_joypad1;
  if((kb == 0x1) && (koldb == 0x1))
  {
   //cprintf("B"); 
     break;

  }
  ke = reg_joypad1;
  if((ke == 0x1) && (kolde == 0x1))
  {
   //cprintf("SELECT"); 
   goto srwzxh;
   break;

   }
  ks = reg_joypad1;
  if((ks == 0x1) && (kolds == 0x1))
  {
   //cprintf("START");   
    break;

  }
  ku = reg_joypad1;
  if((ku == 0x1) && (koldu == 0x1))
  {

    //上
     break;

  }
  kd = reg_joypad1;
  if((kd == 0x1) && (koldd == 0x1))
  {

     //下

     break;

  }
  kl = reg_joypad1;
  if((kl == 0x1) && (koldl == 0x1))
  {

     //左

     break;

  }
  kr = reg_joypad1;
  if((kr == 0x1) && (koldr == 0x1))
  {

     //右
     break;

  }
  kolda = ka;
  koldb = kb;
  kolde = ke;
   
  kolds = ks;
  koldu = ku;
  koldd = kd;
  koldl = kl;
  koldr = kr;
  reg_joypad1 = 1;
  reg_joypad1 = 0;

为了随时等待玩家按键,需要有个循环......

while(1)

{

reg_joypad1 = 1;
reg_joypad1 = 0;

ka = reg_joypad1;
  if((ka == 0x1) && (kolda == 0x1))
  {
   //A
     break;

  }
  kb = reg_joypad1;
  if((kb == 0x1) && (koldb == 0x1))
  {
   //B

     break;

  }
  ke = reg_joypad1;
  if((ke == 0x1) && (kolde == 0x1))
  {
   //SELECT
   goto srwzxh;
   break;

   }
  ks = reg_joypad1;
  if((ks == 0x1) && (kolds == 0x1))
  {
   //START
    break;

  }
  ku = reg_joypad1;
  if((ku == 0x1) && (koldu == 0x1))
  {

    //上
     break;

  }
  kd = reg_joypad1;
  if((kd == 0x1) && (koldd == 0x1))
  {

     //下

     break;

  }
  kl = reg_joypad1;
  if((kl == 0x1) && (koldl == 0x1))
  {

     //左

     break;

  }
  kr = reg_joypad1;
  if((kr == 0x1) && (koldr == 0x1))
  {

     //右
     break;

  }
  kolda = ka;
  koldb = kb;
  kolde = ke;
   
  kolds = ks;
  koldu = ku;
  koldd = kd;
  koldl = kl;
  koldr = kr;
  reg_joypad1 = 1;
  reg_joypad1 = 0;

}

这样就可以了......

再说一句,FC只有2K内存,不要像在PC和PSP那样浪费,能用1字节的不要多用,数组省着点用......

好了,恭喜你,这三节课学的内容完全可以做简单的文字游戏了,赶快试试吧......

  评论这张
 
阅读(360)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017