lexuege软件编程吧 关注:6贴子:76
  • 9回复贴,共1

【教程】pascal游戏编程

取消只看楼主收藏回复

取自自身经验,引用资料无数(早忘了从哪里来的了)


IP属地:浙江1楼2014-12-28 19:21回复
    第一部分:crt下的游戏编程
    这一部分其实我很不想讲,因为crt能得到的画质不是一般的(好),但其方便的操作和简单的中文输出方法还是有一定优势的


    IP属地:浙江2楼2014-12-28 19:24
    收起回复
      一、crt下的中文输入
      这一点最为简单,所以写在最前面。
      有时候,我们会发现在输入中文时输出的是乱码(或者是????)
      这是因为控制台默认值不对,此时右击写着"Free Pascal IDE"的框,跳出来一个菜单,单击“默认值”在选项->默认代码页中选带有Chinese的一项,确定,最后重启编译器即可。


      IP属地:浙江4楼2014-12-28 20:08
      回复
        二、crt库(单元?)的调用
        前言:使用crt请在程序最开头(定义变量前面)声明uses crt;
        1.最重要的readkey
        readkey是crt中最好用(个人感觉,非官方)的一个函数,它的返回值为按下键。如
        【栗子】
        uses crt;
        var ch:char;
        begin
        ch:=readkey;
        readkey;
        write(ch);
        end.
        这个程序运行后,你不得不按下两个键,而显示的结果就是你第一次按下的键
        所以readkey还可单用,作用为延时至有键按下。
        但调过这个栗子的人应该发现了,有时只要按一次就行了,这可以分为两种情况
        ①.你按的是正常键,但反应没有电脑快,电脑以为你连按了两下。(所以在编写游戏是需要尤其小心这种情况,解决方法等会儿给出)
        ②.你按的键不正常(请容许我这么说),好多键都是一次返回两个值,一次是ascii码为0的控制符,第二次有时一个值,上下左右键的判断也可由此得出)


        IP属地:浙江5楼2014-12-28 20:24
        回复
          下面给出得到即时按键的解决方案:
          其实就是不停地清理读入栈
          while keypressed do readkey;
          在需要读入前清理一下(当然,即时类游戏不必了,一直都在清理)


          IP属地:浙江9楼2015-01-09 18:25
          回复
            3.简单轻松的延时delay
            在楼上的楼上,我使用了for i:=1 to 10000000 do;来实现延时
            但其实delay就能轻松做到
            delay(1000)就表示延时1秒
            delay(1500)就表示延时1.5秒……
            当然这和运算速度也有一定关系


            IP属地:浙江10楼2015-01-09 18:28
            收起回复
              4.各种清屏的姿势
              ①clrscr
              还有什么能说的呢?唯一的作用:全屏清掉
              ②delline
              清掉光标所在行,以下行全部向上(有人用来滚动屏幕)
              【栗子】
              uses Crt;
              begin
              ClrScr; //clrscr常在程序头出现,删掉那一串编译信息
              WriteLn;
              WriteLn('Line 1');
              WriteLn('Line 2');
              WriteLn('Line 2');
              WriteLn('Line 3');
              WriteLn;
              WriteLn('Oops, Line 2 is listed twice,',
              ' let''s delete the line at the cursor postion');
              GotoXY(1,3);
              ReadKey;
              DelLine;
              GotoXY(1,10);
              end.


              IP属地:浙江11楼2015-01-09 19:19
              回复
                至此,crt库最重要(常用)的过程函数已全部给出(以后也许会继续补充)


                IP属地:浙江12楼2015-01-09 19:31
                收起回复
                  想用鼠标?
                  还好第一部分还没完——
                  三、mouse单元的使用
                  顾名思义,mouse单元就是用来用鼠标的。
                  因此有用的过程函数也就一点点,马上结束第一部分!
                  前言同上(使用mouse请在程序最开头(定义变量前面)声明uses mouse;)
                  (简写:uses mouse,crt;)


                  IP属地:浙江13楼2015-01-09 19:40
                  回复
                    唯一重要的getmousex&getmousey
                    几乎不用解释,看看例子就知道了
                    【栗子】
                    uses crt,mouse;
                    begin
                    initmouse;
                    repeat
                    clrscr;
                    writeln('X:',getmousex,' Y:',getmousey);
                    delay(10);
                    until false;
                    end.
                    只需注意:xy为坐标系意义下的xy,而不是传统意义
                    所以x是列,y是行。(从(0,0)开始)


                    IP属地:浙江14楼2015-01-09 20:07
                    回复(2)