lexuege软件编程吧 关注:6贴子:76

【教程】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
        回复
          考虑精


          7楼2014-12-28 21:22
          收起回复
            下面给出得到即时按键的解决方案:
            其实就是不停地清理读入栈
            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)
                        yes,你龟啊!


                        15楼2015-01-10 13:15
                        收起回复
                          应该还有一个dos单元吧


                          16楼2017-09-01 09:42
                          回复
                            包括打开文件夹,获取文件列表等


                            17楼2017-09-01 09:44
                            回复
                              dos单元


                              18楼2017-10-06 16:51
                              回复