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

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

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

 
 
 

日志

 
 

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

2009-10-18 22:35:27|  分类: FC网友经验 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

作者任天行,转载请注明

貌似有人说我FC不搞了,证明一下,还是接着写教程吧.......

这节课主要讲略大的程序的编程方法........

我一般的程序就这么写的.......

好,首先看一段程序:

#include <conio.h>

int a;

int jd;//进度

#define reg_joypad1 *(char*)0x4016

unsigned char ka, kolda;

int main(void)

{

 jd = 0;

 clrscr();

 pdyxjd:

 switch(jd)

 {

  case 1://第二个画面

   ys(50);//延时

   gotoxy(0,0);

   cprintf("Screen 2\n");

   cprintf("MAKE BY RTX\n");

   reg_joypad1 = 1;

   reg_joypad1 = 0;

   while(1)

   {

    reg_joypad1 = 1;

    reg_joypad1 = 0;

    ka = reg_joypad1;

    if((ka == 0x1) && (kolda == 0x1))

    {

     jd = 0;//切到屏幕1

     goto pdyxjd;

     break;

    }

    kolda = ka;

    reg_joypad1 = 1;

    reg_joypad1 = 0;

   }

  case 0://开始画面

   ys(50);//延时

   gotoxy(0,0);

   cprintf("Screen 1\n");

   cprintf("MAKE BY RTX\n");

   reg_joypad1 = 1;

   reg_joypad1 = 0;

   while(1)

   {

    reg_joypad1 = 1;

    reg_joypad1 = 0;

    ka = reg_joypad1;

    if((ka == 0x1) && (kolda == 0x1))

    {

     jd = 1;//切到屏幕2

     goto pdyxjd;

     break;

    }

    kolda = ka;

    reg_joypad1 = 1;

    reg_joypad1 = 0;

   }

 }

}

int ys(int yssj)//延时

{

 for(a=0;a<=yssj;a++) 

 {

  waitvblank();

 }

 return 0;

}

这段的主要内容就是两个屏幕,按A键切换,并且添加了一个用于延时的函数.......

但是,这只是一个演示,

我们可以把它延伸一下,

例如,一个游戏,第一个画面是作者的标志一闪,然后是主菜单,主菜单又分出去作者介绍,开始游戏,读取游戏三项,这样编可以使逻辑更清晰,并且简单的在屏幕间切换.

如果你从下到上看不习惯,我们给改一改.......

#include <conio.h>

int a;

int jd;//进度

#define reg_joypad1 *(char*)0x4016

unsigned char ka, kolda;

int main(void)

{

 jd = 0;

 clrscr();

 pdyxjd:

 switch(jd)

 {

  case 0://开始画面

   if(jd == 0)

   {

   ys(50);//延时

   gotoxy(0,0);

   cprintf("Screen 1\n");

   cprintf("MAKE BY RTX\n");

   reg_joypad1 = 1;

   reg_joypad1 = 0;

   while(1)

   {

    reg_joypad1 = 1;

    reg_joypad1 = 0;

    ka = reg_joypad1;

    if((ka == 0x1) && (kolda == 0x1))

    {

     jd = 1;//切到屏幕2

     goto pdyxjd;

     break;

    }

    kolda = ka;

    reg_joypad1 = 1;

    reg_joypad1 = 0;

   }

   }

  case 1://第二个画面

   if(jd == 1)

   {

   ys(50);//延时

   gotoxy(0,0);

   cprintf("Screen 2\n");

   cprintf("MAKE BY RTX\n");

   reg_joypad1 = 1;

   reg_joypad1 = 0;

   while(1)

   {

    reg_joypad1 = 1;

    reg_joypad1 = 0;

    ka = reg_joypad1;

    if((ka == 0x1) && (kolda == 0x1))

    {

     jd = 0;//切到屏幕1

     goto pdyxjd;

     break;

    }

    kolda = ka;

    reg_joypad1 = 1;

    reg_joypad1 = 0;

   }

   }

  

 }

}

int ys(int yssj)//延时

{

 for(a=0;a<=yssj;a++) 

 {

  waitvblank();

 }

 return 0;

}

看到了吗,这样从上到下,要多加一个等于判断,如果不加,会执行你从等于到最大的所有内容,我的习惯是这个,而通常不是第一个.

再讲讲函数,使用函数是个好习惯,这样可以使你的代码清晰,而且简洁有序,这个代码中加了一个用于延时的简单函数,这个函数在以前的教程里出现过,这里只是再用一下,因为游戏演示很普遍.......int ys是定义这个函数返回为int形式,名称是ys,(int yssj)是定义输入值,使用函数的时候输入一个int形式的变量给函数,这个变量仅在函数内使用.这个函数返回为0,这是一般不需要返回的函数的通常用法,如果需要,就要在调用函数的时候在函数前面加上一个能接受函数返回值的变量赋值,例如b = ys(50);这样就是行了.函数可以应用很广,例如没有标准函数支持的数学运算等.......

好了,就讲到这里......

留个练习题,自己看看行不行,就是这个代码里,检查A键是否按下的代码也可以通用,把检测是否按下A键做成函数并调用,看看能不能成功,我自己试了没问题........

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

历史上的今天

评论

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

页脚

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