找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

游戏编程学习C++——Chapter3 变量赋值与运算

admin 2020-7-13 05:44 90人围观 C++相关



 游戏编程学习C++——对照python和java

游戏这种娱乐方式,与众不同,它能让玩家一连几个小时守在屏幕跟前,丰富的情景,身临其境的交互,让人留恋不返。

实质上,这些都是得益于编程。正是编程使得游戏的情节充满挑战,正是编程使得游戏交互良好。

那么,如果你决心要长大,就应该励志作为创造者,就要进入编程工作者行列,首先成为一个程序语言的学习者。

假设你是一个编程初学者,即使没有任何编程经验的初学者,或许你有一定的游戏经验,这不重要,只要一旦进入游戏状态,尤其我们自己动手编写游戏,将是乐趣无穷。

本教程将引领你步入编程的殿堂,通过一个个实际的实例程序,徐徐展开。当然,我们以C++语言为纲,同时给出java语言和python语言的实现方式,让大家参考对照。

说明

1.本教程编程代码的运行环境:

  • Python语言:Microsoft Visual Studio Community 2019,python3.8

  • C++语言:Microsoft Visual Studio Community 2019,  Visual C++ 2019

  • java 语言:IntelliJ IDEA  2020.1  java version"13.0.2"


2.参考书籍

  • 《Beginning C++ through game programming》4th

  • 《疯狂java讲义》5th

  • 《疯狂python讲义》

  • 《python游戏编程入门》

  • 《Barron’s Ap Computer Science A》

  • 《Invitation to computer science》7th



Chapter3 变量赋值与基础数据类型



3.1 项目背景



变量代表了计算机内存的某部分,这部分会用来存储数据,然后检索、操作数据。比如游戏中记录玩家的得分,就可以建立一个专门的变量。这样一来,程序就可以每次计算并记录玩家的得分,游戏也可以读取并显示玩家得分。

下面的游戏项目以太空设计为背景,游戏过程中需要记录玩家得分、击毁敌人数目以及玩家防护盾是不是开启等条目,程序Gamestatus3.1,Gamestatus3.2为以上信息配备了变量。

运行效果如下:



3.2学习目标



1 熟悉变量的声明与赋值

2 熟悉C++语言基本的数据类型

3 接触cin输入的操作

4 变量的运算;

5 在计算中要考虑变量范围的溢出

3.3 运行代码(1)变量的赋值:GameStas3.1



    //3变量与基本数据类型//3.1Game stats//演示变量的类型声明与赋值#include<iostream>usingnamespace std;intmain(){//***************变量声明****************int score;float distance;char playAgain;bool shieldsUp;short lives, aliedKilled;//****************赋值************ score= 0; distance= 2120.5; playAgain= 'y'; shieldsUp= true; lives= 3; aliedKilled= 10;double engineTemp =6572.89;//************输出********************cout<<"Game status3.1"<< endl;    cout<<"********本程序演示变量的声明与赋值(C++)*****"<< endl;cout<<"\n int score:"<< score << endl;cout<<"float distance:"<< distance << endl;cout<<"char playAgain: "<< playAgain << endl;cout<<"double enginTemp:"<< engineTemp << endl;//***************输入与变量赋值*****************int fuel;cout<<"\nHow much fuel left?"<< endl;cin>> fuel;cout<<"int fuel= "<< fuel << endl;//***********自定义类型********************* typedefunsignedshortint ushort; ushort bonus = 10;cout<<"\nbonus="<< bonus << endl;    return 0;}
    运行效果——




    3.4运行代码(2)变量的运算:Gamestas3.2



      //Game status 2.0//变量的赋值与运算#include<iostream>;usingnamespace std;intmain(){cout<<"***********本程序演示变量的运算****************"<< endl; unsignedint score = 1000;cout<<"score="<< score << endl; score= score + 100;cout<<"score+100,score="<< score << endl;//赋值减缩运算符 score+= 200;cout<<"score+=200,score="<< score << endl;//自增运算符int lives = 3; ++lives;cout<<"lives=3,++lives,lives="<< lives << endl; lives= 3; lives++;cout<<"lives=3,lives++,lives="<< lives << endl;//自增运算符在复杂计算中的情况cout<<"\n*****************重点关注:复杂表达式中的自增运算符***************\n"; lives= 3;int bonus = lives++ *10;cout<<"lives=3,lives++*10,lives,bonus="<< lives <<","<< bonus << endl; lives= 3; bonus = ++lives * 10;cout<<"lives=3,++lives*10,lives,bonus="<< lives <<","<< bonus << endl;//数值范围溢出cout<<"\n*************整数溢出********************\n"; score= 4294967295;cout<<"\nscore="<< score << endl;cout<<"score+1="<< ++score << endl;return0;}

       运行效果——



      3.5代码语法



      3.5.1基本数据类型


      每个创建的变量都属于某一类型,类型代表了在变量中可以存储的信息的类别,声明了编译器需要为变量准备的内存大小。

      内置的C++的基本数据类型包括表示布尔值(true ,false)的bool类型、表示单个字符的char类型,表示整数的int型,表示单精度浮点数的float类型,以及表示双精度浮点数的double类型。5种

      不过,使用类型修饰符,可以对类型进行修改,

      • short缩小空间,同时缩小数值范围

      • long扩充空间,同时扩充可以表示的数值范围

      • unsigned则表示无符号数,只能修饰Int整数型,表示空间没有变化,但是数值范围加倍;因此,我们也知道int默认是signed.


      Java则规范一点,统一为boolean类型和数值类型,只是数值细化分整数byte,short,int,long;

      浮点数float,double,以及字符型char,也就是java把char是作为数值处理的。

      Python基本数据类型,

      取消了单字符的char,扩充为string类型(str),

      bool作为数值,0为False,非0就是True。

      数值型,int,float合并了所有整型、浮点数,同时增加了复数complex类型。



      数据类型

      内存

      取值范围

      C

      +

      +

      整型

      > int

      4字节

      -2147483648~2147683647

      >unsigned int

      32bits

      0~4294967295

      >short int

      16bits

      -32768~32767

      >long int

      64bits

      -9223372036854775808~9223372036854775807

      浮点

      >float

      4Bytes

      3.4E+/-38(7个有效数字)

      >double

      8Bytes

      1.7E+/-308(15个有效数字)

      单字符

      >char

      1Bytes

      256个字符,单引号

      布尔值

      >bool

      1Bytes

      >true;>false

      J

      A

      V

      a

      整数

      >byte

      1Bytes

      -128~127

      >short

      2Bytes

      -32768~32767

      >int

      4Bytes

      -2147483648~2147683647

      >long

      8Bytes

      -9223372036854775808L~9223372036854775807L

      浮点数

      float

      4Bytes

      1.4E-45F~3.4028235E38F

      double

      8Bytes

      4.9E-324~1.7976931348623157E308

      单字符

      >char

      2Bytes

      Unicode编码,单引号,整型

      布尔型

      >boolean

      1Bytes

      <true;>false

      P

      Y

      T

      H

      O

      n

      数值

      >int

      正整数,负整数,0,可以任意大

      >None

      空值

      >float

      精度限制

      >complex

      2+3j;  0+3J

      布尔

      >bool

      特殊的整型,True,False,整型的0为False,非0为True

      字符串

      >str

      Unicode编码单个字符或者多个字符,单引号、双引号都可以



      • 技巧1:具体范围取决于你的电脑上的编译器;C ++short int 可以缩写为short,long int缩写为long.

      • 技巧2:类型的选择。C++中如此多的类型,如何选择呢?一般默认,需要整型,使用int,需要浮点,使用float.因为这些占据的内存空间能被计算机最有效地处理。一般在Java中,整型默认为int,浮点默认double类型,所以对于float类型,需要加注f,or F,比如float f1=1234.45F.

      • 技巧3:注意超出范围会溢出,所以选取类型很是很要认真

      • 技巧4:为类型定义新名字。太长了类型名字,可以简化使用命令typedef old name  new name


      3.5.2变量的声明、命名与赋值


      变量就像一个个小容器,用来承装程序中的数据。在C++和java中都需要提前声明变量类型,然后才能赋值。Pyhton的动态性则运行随时改变类型赋值。

      在C++,java均属于强类型语言Strongly typed language

      • 所有的变量必须提前声明后使用;

      • 指定类型的变量只能接受与类型匹配的值。

      强类型的语言在编译时都会进行严格的语法检查,从而减少编译错误。

      Python则时弱类型语言:

      • 变量无须声明即可赋值,对一个不存在的变量赋值就像定义了一个新的变量

      • 变量的数据类型可以动态改变,同一个变量可以一会儿被赋值为整数值,一会儿被赋值为字符串等等。


      变量的命名,又称为变量的标识符需要满足下面几个规则:

      • 标识符只能包含数字、下划线和字母;

      • 标识符不能以数字开头;

      • 标识符不能是关键字。也就是语言本身保留的特殊词汇。

      这些规则在C++,Java和Python等语言中都是一致的。

      常见的保留关键字,大家可以查阅相关资料。

      3.5.3获取用户输入


      很明显,cin与cout都是iostream中定义地对象,负责接收用户的输入

      3.5.4赋值运算与紧缩赋值运算符


      赋值运算符是“=“,要区别的就是,判断是不是相等的比较运算符”==“

      几种主流编程语言C++,Java,Python都提供了复合赋值运算符,笔者称为赋值运算的紧缩式

      运算符

      示例

      等价语句

      特殊说明

      +=

      >x+=5

      >x=x+5



      -=

      >x-=5

      >x=x-5



      *=

      >x*=5

      >x=x*5



      /=

      >x/=5

      >x=x/5



      %=

      >x%=5

      >x=x%5



      //=

      >x//=5

      >x=x//5

      Python独有

      **=

      >x**=5

      >x=x**5

      Python独有


      3.5.5自增自减运算符


      在循环中经常用到循环变量增加或者减少,因此C++和Java中都提供了自增、自减的运算符。单个变量的前置与后置自增运算结果式一样的,但是更加复杂的表达式中就不是那样了。

      下面以递增运算符为例说明。

      运算符

      运算示例

      等价语句

      前置自增运算符

      B=++lives

      >lives=lives+1

      B=lives

      Bonus=++lives*10

      >lives=lives+1

      Bonus=lives*10


      后置递增运算符

      B=lives++

      >B=lives

      >lives=lives+1

      Bonus=lives++*10

      Bonus=lives*10

      >lives=lives+1


      3.6 语言对照




      Python版本
        #变量的赋值与运算演示#Game Statusprint("***********变量的赋值与运算(python)*************")scores=1000lives,aliensKilled=3,10distance=1234.5678playAgain="yes"shieldUp=Truescores+=200lives+=1bonus=lives*aliensKilledprint("scores=",scores)print("distance=",distance)print()print("lives=%s,aliensKilled=%s,bonus=%s"%(lives,aliensKilled,bonus))print()

        运行结果:
          ***********变量的赋值与运算(python)*************scores= 1200distance= 1234.5678lives=4,aliensKilled=10,bonus=40请按任意键继续. . .



          Java 版本



          public class GameStatus {
              /*
              *Game Status
              *展示变量的赋值与运算
               */
              public static void main(String[]args){
                  System.out.println("************变量赋值****************");
                  int score=5000;
                  byte lives=3;
                  short aliensKilled=10;
                  long shotNum=1234567L;
                  char playAgain='y';
                  float distance=2105.76f;
                  boolean shieldUp=true;
                  System.out.println("\nscore="+score);
                  System.out.println("lives="+lives);
                  System.out.println("distance="+distance);
                  System.out.println("************变量运算****************");
                  lives=3;
                  int bonus=lives++*aliensKilled;
                  System.out.println("lives=3,lives++*aliensKilled="+bonus);
                  lives=3;
                  bonus=++lives*aliensKilled;
                  System.out.println("lives=3,++lives*aliensKilled="+bonus);

              }
          }

          运行结果:

            ************变量赋值****************score=5000lives=3distance=2105.76************变量运算****************lives=3,lives++*aliensKilled=30lives=3,++lives*aliensKilled=40

            3.7问题讨论


             1.为什么有两种版本的递增运算符?它们的区别是什么?

            2.你知道bool型名称源自哪里?

            3.编写一个程序,它从用户获取三个游戏分,并显示其平均值。



            python编程助力统计学——绘制箱线图

            通过游戏编程学习C++ (2)Expensive Calculator



            7:7
            Ask, and it shall be given you; seek, and ye shall find; knock, and it shall be opened unto you:
            7:8
            For every one that asketh receiveth; and he that seeketh findeth; and to him that knocketh it shall be opened.

            这句话是鄙人学习圣经文化最大的受益,大概也是天地情怀最好的注释。

            我们需要对天地更多敬畏和沉思,对身边的环境更多亲昵和恋爱,对亲人朋友更多感恩敬重。然后,境随心变。

                                          注:插图是捕捉18年暑假前后的画面。

            ----------------------------------------------------------------------------------------------------------------------
            我们尊重原创,也注重分享,文章来源于微信公众号:一起编程学数学,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
            ----------------------------------------------------------------------------------------------------------------------

            鲜花

            握手

            雷人

            路过

            鸡蛋

            yafeilinux和他的朋友们微信公众号二维码

            微信公众号

            专注于Qt嵌入式Linux开发等。扫一扫立即关注。

            Qt开源社区官方QQ群二维码

            QQ交流群

            欢迎加入QQ群大家庭,一起讨论学习!

            我有话说......