精华内容
下载资源
问答
  • 那么现在你可以想想这里有没有弄错了。 后来我发现确实是了KEYDOWN的方法,还是出现这种状况,那我就开始思考问题究竟出现在哪? if not pause: if event.type == pg.KEYDOWN: #全屏炸弹 if event.key== pg.K_...

    关于这个问题,我最先想到的就是炸弹的使用方式是键盘按压式,还是敲击键盘式,(即key_pressed 或 KEYDOWN)。那么现在你可以想想这里有没有弄错了。
    后来我发现确实是用了KEYDOWN的方法,还是出现这种状况,那我就开始思考问题究竟出现在哪?

    if not pause:        
    	if event.type == pg.KEYDOWN:  #全屏炸弹
        	if event.key== pg.K_SPACE and bomb_count > 0:
        		bomb_count  -= 1
            	bomb_sound.play()
            	print('go on')
            	for each in groups:
                	if each.rect.bottom > 0:
                		each.alive = False
    

    在这里我就想到一个简单方便检测bug的方法,我在我要检测错误的地方加上一条print语句,其中的内容并不重要,重要的是看print语句有没有被执行,或者执行了几次。(也可以写成print(bomb_count),这样可以直观的看到炸弹数量的减少,而且是由这段代码引起的)

    结果却如图所示,go on 被打印了多次???
    这时我就要思考了,为什么一个KEYDOWN的事件会背执行这么多次??

    这里我就想到, 有没有可能是因为敌机爆炸的动画延时了大概12帧左右导致的?但是我随机就发现,我的if判断语句好像没有联系到敌机是否爆炸(即enemy.alive == False或者True),所以这个猜想是不太可能成立的。

    于是我只能重新读自己写的又臭又长的代码,自我感觉好像没问题,这时我实在没办法,我就思考会不会是语句之间顺序的问题???

    我把前面那段代码提到最前面,就像这样:

    while running:
            for event in pg.event.get(): 
            	if event.type == pg.KEYDOWN:
                        if event.key== pg.K_SPACE:  #全屏炸弹
                            bomb_count  -= 1
                            bomb_sound.play()
                        	for each in groups:
                           		if each.rect.bottom > 0:
                                	each.alive = False
    

    然后我震惊的发现,再次按空格键,炸弹居然没有再减少到 0 。这么说就是语句顺序出现了问题,于是我重新读自己的代码,原来未修改的错误代码如下:

    while running:
            for event in pg.event.get():                                                                                        
                if me.life == 0:
                    running = False
                elif event.type == pg.QUIT:
                    pg.quit()                    #这个必须在sys.quit前面,否则程序冲突
                    sys.exit()
                elif event.type == SUPPLY:      #补给发放
                    supply_sound.play()
                    if random.choice([True,False]):                    
                        bo_supply.reset()
                    else:
                        bu_supply.reset()
                    
                elif event.type == pg.MOUSEBUTTONDOWN:          #鼠标点击切换暂停
                    if event.button == 1 and pause_rect.collidepoint(event.pos):
                        pause = not pause
    
                elif event.type == pg.MOUSEMOTION:
                    if pause_rect.collidepoint(event.pos):
                        if pause:
                            pause_image = resume_pressed_image
                        else:
                            pause_image = pause_pressed_image
                    else:
                        if pause:
                            pause_image = resume_nor_image
                        else:
                            pause_image = pause_nor_image
                            
            screen.blit(bg,(0,0))              #把屏幕重新绘制,防止暂停偷看屏幕
            if not pause:                                                                                           #游戏暂停
            	if event.type == pg.KEYDOWN:
                	if event.key== pg.K_SPACE:                     #全屏炸弹
                    	bomb_count  -= 1
                        bomb_sound.play()
                        for each in groups:
                            if each.rect.bottom > 0:
                                each.alive = False       
                key_pressed = pg.key.get_pressed()      #获得哪些按键被长按
                
                if key_pressed[pg.K_w] or key_pressed[pg.K_UP]:    #游戏操作
                    me.moveUp()
                if key_pressed[pg.K_s] or key_pressed[pg.K_DOWN]:
                    me.moveDown()
                if key_pressed[pg.K_a] or key_pressed[pg.K_LEFT]:
                    me.moveLeft()
                if key_pressed[pg.K_d] or key_pressed[pg.K_RIGHT]:
                    me.moveRight()
    

    仔细地读一读,不难发现screen.blit(if not pause这句也是)这一语句居然和for event这一语句的递进关系处于同一级!这就表明当程序执行到这时前面的for event in pg.event.get()语句中的event已经结束了,那么我的空格键事件当然不会再正常执行。

    于是解决方法就出来了,我们只需要把空格的那段语句提前到screen.blit语句前面就好了,但是要注意的是我们这里有暂停功能的,那么暂停后,你总不能按爆炸吧。因此还要在前面加上一句if not pause:即可。

    部分正确代码:

    elif not pause:        
                if event.type == pg.KEYDOWN:
                    if event.key== pg.K_SPACE:          #全屏炸弹
                        bomb_count  -= 1
                        bomb_sound.play()
                    	for each in groups:
                        	if each.rect.bottom > 0:
                            	each.alive = False
                        
        screen.blit(bg,(0,0))       #把屏幕重新绘制,防止暂停偷看屏幕
        if not pause:                                                                                           #游戏暂停       
            key_pressed = pg.key.get_pressed()      #获得哪些按键被长按
            
            if key_pressed[pg.K_w] or key_pressed[pg.K_UP]:   #游戏操作
                me.moveUp()
            if key_pressed[pg.K_s] or key_pressed[pg.K_DOWN]:
                me.moveDown()
            if key_pressed[pg.K_a] or key_pressed[pg.K_LEFT]:
                me.moveLeft()
            if key_pressed[pg.K_d] or key_pressed[pg.K_RIGHT]:
                me.moveRight()
    

    总结:写代码的经验还是太少,相对于这种复制大型一点的代码,语句的逻辑混乱就出现了,看来我还是要再多加练习。。。

    展开全文
  • Eclipse 用空格代替Tab

    2014-12-10 14:23:48
    之前一直设置不成功,后来发现设置的位置错了。 打开 窗口-> 首选项->常规-> 编辑器->...其实没有效果,为什么没有效果不知道。后又上网查了查,需要设置另外一个地方(我的C++ IDE) 打开 窗口-> 首选项 -> C/C++

    之前一直设置不成功,后来发现设置的位置错了。

    打开 窗口-> 首选项->常规-> 编辑器->文本编辑器 界面:

      "显示的Tab键宽度" 设置为4;

      “插入空格代替制表符” 勾选;

    以为设置这两个后,再按Tab健就能插入4个空格了。


    其实没有效果,为什么没有效果不知道。后又上网查了查,需要设置另外一个地方(我用的C++ IDE)

    打开 窗口-> 首选项 -> C/C++ -> 代码样式 -> 格式化程序 界面,

      以内置的概要文件为模板新建一个,然后编辑选择“缩进”选项卡;

      “跳转策略”拉选为“仅空格”;

      “缩进大小” 设置为 4;

      “Tab键大小” 设置为4;

    点击“确定”保存就可以了。


    在 窗口-> 首选项->常规-> 编辑器->文本编辑器 界面

    勾选 “ Show whitespace characters” 可以显示空白字符的格式

    展开全文
  • 往Excel单元格中填(自己想象),一个单元格的宽度N(也就是可容纳的字符个数),当在填充单元格时输入了制表符(也就是下tab时)就跳到下一个单元格的开头填,如果上一个单元格没有填满,则需要用空格...

    《C语言程序设计》练习1-20 编写程序detab

    疑惑:主要是搞清楚制表符终止位是什么意思。
    题意理解:制表符终止位可以看成是Excel单元格之间的竖线。这道题可以理解为:从键盘依次输入字符序列,往Excel单元格中填(自己想象),一个单元格的宽度为N(也就是可容纳的字符个数),当在填充单元格时输入了制表符(也就是按下tab键时)就跳到下一个单元格的开头填,如果上一个单元格没有填满,则需要用空格将其填满;如果填满了单元格时都没有遇到制表符则自动跳到下一个单元格,从头开始填充。这里就是要求用空格来填充满单元格剩下的空间, 来达在填写Excel表格中到按下tab键时的效果。
    例如:
    假设单元格宽度为6,如果输入了 ‘abc’三个字符后,输入制表符(\t),那么就要用3个空格将其填满;
    如果输入了‘a’后输入制表符,则需要输入5个空格填满。
    一种特殊情况,如果在开头就输入制表符,则需要6个空格将其填满。

    所以关键是判断在当前单元格已输入了几个字符,用单元格宽度减去即可得到输入填充的空格数。
    代码如下:

    /* P25 练习1-20 ,编写程序detab:将输入的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方。
    	制表符终止位可以看成是Excel每2个单元格之间的竖线。
    	这道题的可以理解为:从键盘输入字符,往Excel单元格中填,一个单元格宽度为N,当在填充单元格输入制表符(也就是按下tab键时)
    	就跳到下一个单元格开始填,如果填满了单元格都没有遇到制表符则自动跳到下一个单元格,开始填充。这里就是要求用空格来填充满单元格剩下的空间
    	来达到按下tab键时的效果。
    */
    
    #include <stdio.h>
    
    #define N 6		/* 每隔N列出现一个制表符终止位 */
    
    void space_replace_table(){
    	int c,cursor_pos,fill_num;
    	cursor_pos = 1;		/* 当前光标在单元格中处于第几列 */
    	fill_num = 0;		/* 要填充的空格数 */
    
    	while( (c=getchar()) != EOF){
    		if(c == '\t'){
    			if( cursor_pos > N)
    				cursor_pos %= N;			
    			fill_num = N - cursor_pos + 1;	/* 要填充的空格数 */
    			if( fill_num > N)
    			{
    				printf("Error: fill_num = %d more than N\n", fill_num);
    			}
    			while(fill_num > 0){
    				putchar(' ');
    				fill_num--;
    			}
    			putchar('|');		/* 在每一个单元格后面输出一条竖线 */
    			cursor_pos = 1;		/* 跳到下一个单元格开头 */
    		}else if(c == '\n'){
    			putchar('\n');
    			cursor_pos = 1;
    		}
    		else{
    			putchar(c);
    			cursor_pos++;
    			if( cursor_pos % N == 1)
    				putchar('|');
    		}
    	}
    }
    
    void main(){
    	space_replace_table();
    }
    

    效果如下:
    在这里插入图片描述

    展开全文
  • 按空格键。。就可以购买物品拉。。。。。ESC键退出和NPC的对话。。。 恩。。。已经介绍的差不多拉。。。。 本引擎是完全由本人制作。。。。一点点的摸索。。花了尽1个月的时间哦。。。 接受高手的批评。。。QQ...
  • cout请依次输入数据(用空格隔开):"; for(int i=1;i;i++) { tempaddress=getnewnode(); cin>>dataarray[tempaddress].data; dataarray[tempaddress].next=NULLP; count++; if(i==1)//挂第一个...
  • 的微软的拼音输入法,就是像平常打字一样,敲了几下键盘,出现输入法的可选汉字,然后还没来得及按空格选字,拼音字母就直接输进去了,就像敲了一下回车而不是按了空格键。 如下图: ![图片说明]...
  • 每个进程必须例中格式输入,请注意有空格键;判断软件是否运行的名称不要和需要终止的 后台进程一致,不然要会终止后台进程,同时本程序可以当作定时终止软件程序。如:判断的 软件名称aaa.ccc ,因为此软件...
  • 想变成抓手的时候,习惯性的一按空格键结果就不知道变成什么工具了,呵呵,一点都不方便, 还有没有别的好的方法吗? 工具箱有缩放工具和手抓工具 缩放工具快捷键Z,左键放大,右键缩小或F4放大,F3缩小;手抓工具...

    CDR里面的屏幕大小除了用滚轮外不知道还有没有别的方法呢?不知道为什么不能像别的PS或AI那样用CTRL+ALT+空格那样放大缩小呢。想变成抓手的时候,习惯性的一按空格键结果就不知道变成什么工具了,呵呵,一点都不方便,
    还有没有别的好的方法吗?

     

     

    工具箱有缩放工具和手抓工具
    缩放工具快捷键Z,左键放大,右键缩小或F4放大,F3缩小;手抓工具快捷键H(相当于photoshop里面的空格键);空格键在当前工具与挑选工具之间切换
    本人习惯了CDR的默认快捷键,当然这些快捷键是可以在工具菜单下——自定义——命令自定义的

    转载于:https://www.cnblogs.com/naniannayue/archive/2010/12/21/1912421.html

    展开全文
  • 转来备用,以后慢慢学

    2010-05-21 14:14:33
     缩放工具的快捷键“Z”,此外“Ctrl+空格键放大工具,“Alt+空格键缩小工具,但是要配合鼠标点击才可以缩放;相同 Ctrl+“+”键以及“-”键分别也可放大和缩小图像;Ctrl+Alt+“+”和Ctrl+Alt+...
  • 标准意第绪语的语音(QWERTY)键盘布局。 此扩展程序在您的Chrome操作系统上安装标准...要切换意第绪语和其他键盘,请单击Ctrl + Shift +空格键。 更新: 0.2 - 错误修复(和“|”键现在创建em-dash) 支持语言:English
  • 空格键或回车键,歌词光标定位到下一个音符的歌词处; (2 )窗口编辑 ①下歌词编辑工具条中的第一个按钮,歌词编辑按钮; ②在弹出的编辑窗口里选择需要编辑的歌词段落; ③在下方的歌词编辑框里编辑...
  • 为什么要提倡结构化的算法? 2 2.7 什么叫结构化程序设计?它的主要内容是什么? 2 第3章 数据类型、运算符与表达式 2 3.3请将下面各数八进制和十六进制数表示: 2 3.4将以下三各整数分别赋给不同类型的变量,请...
  • 这就是为什么我进行此扩展-使其变得简单! 现在,您只需单击扩展名(安装后)的徽标,然后开始键入,直到找到您的书签并单击它为止。 也可以通过快捷方式-cmd + E(Mac)/ ctrl + W(Windows / Linux)使用。 尽管...
  • 论坛登陆生成器v1.41

    2015-07-12 23:04:26
    运行后,会有个黑框出现几行提示,当你准备好后请选中这个黑框里后在键盘上随便个字母、数字或方向 如果你的用户名不超过100个,可能闪一下就结束了。 完成后请检查你的“开始”菜单里,会多出了一项XXXX...
  • 9.8 为什么用const说明的常量不能用来定义一个数组的初始大小? 9.9 字符串和数组有什么不同? 第10章 位(bit)和字节(byte) 10.1 什么方法存储标志(flag)效率最高? 10.2 什么是“位屏蔽(bit masking)”...
  • C语言编程要点

    2017-09-18 00:10:37
    9.8. 为什么用const说明的常量不能用来定义一个数组的初始大小? 145 9.9. 字符串和数组有什么不同? 145 第10章 位(bit)和字节(byte) 147 10.1. 什么方法存储标志(flag)效率最高? 147 10.2. 什么是“位屏蔽(bit ...
  • 敦利极速输入法4.0

    2008-05-11 14:59:06
    全部的重码一般最多只有三个,重码三个字均可用快捷键迅速打出, 第一码空格键,第二码,左shift键键,第三码,第三码右shift键。 3. 拥有完善的自动调频技术,减少选来选去的烦恼 4. 自定义总在最前 5...
  • 进入后,你可以方向移动光标选择CMOS设置界面上的选项,然后Enter进入副选单,ESC来返回上一级菜单,PAGE UP和PAGE DOWN来选择具体选项,F10保留并退出BIOS设置。 1.STANDARD CMOS SETUP(标准...
  • 11..net做B/S结构的系统,您是几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层...
  • 设置好制表位后,把光标放在公式的前面,一下Tab,这样就在公式的前面插入了一个制表符,此时公式以居中制表位中心居中对齐,再把光标移到公式和左括号之间,再Tab插入一个制表符,编号就跑到行末了。...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    30、为什么 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1、xml有哪些解析技术?区别是什么? 113 2、你在项目中用到了xml技术的哪些方面?如何实现的? 114 3、jdom解析xml文件时如何解决中文问题?如何解析? ...
  • 30、为什么 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1、xml有哪些解析技术?区别是什么? 113 2、你在项目中用到了xml技术的哪些方面?如何实现的? 114 3、jdom解析xml文件时如何解决中文问题?如何解析? ...
  • 为什么结果会不同呢?就是因为printf函数对输出表中各量求值的顺序是自右至左进行 的。在式中,先对最后一项“-i--”求值,结果为-8,然后i自减1后为7。 再对“-i++”项求值得-7,然后i自增1后为8。再对“i--”项求...
  • 下你的开始菜单,你会发现有些东西你是从来也不会的,例如:注销,这是多用户而设计,但我们都没有这样的习惯——每个机的人开个帐号,如果想删除它,操作如下: 打开注册表到HKEY_CURRENT_USER\...
  • Java面试宝典-经典

    2015-03-28 21:44:36
    30、为什么 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1、xml有哪些解析技术?区别是什么? 113 2、你在项目中用到了xml技术的哪些方面?如何实现的? 114 3、jdom解析xml文件时如何解决中文问题?如何解析? ...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    30、为什么 ORM? 和 JDBC 有何不一样? 六. XML部分 1、xml有哪些解析技术?区别是什么? 2、你在项目中用到了xml技术的哪些方面?如何实现的? 3、jdom解析xml文件时如何解决中文问题?如何解析? 4、编程JAVA...
  • TXT小说阅读器 V12.11.29

    2012-11-29 16:13:55
    2 :为什么转换成繁体字之后会出现字体大小不一或者部分文字不显示? 出现该问题,可能是您的字体库中没有收录不显示的文字。您可以尝试更改本软件的字体!直到可以正确显示! 3:为什么打开文件却什么都不显示? ...
  • IME Tool 让你可以自由地设置各种热键,基本(ctrl、alt、shift)共有六种组合,辅助有 91 个可选,如左 Alt+左 Window 激活龙文五笔,shift+down 激活紫光拼音。当然,有些热键组合是不能的,如 shift+...
  • Visual Studio程序员箴言--详细书签版

    热门讨论 2012-10-16 20:37:39
    技巧4.23 为什么要让工具窗口处于浮动状态 88 4.2.4 选项卡式文档状态 89 技巧4.24 使用选项卡式文档最大化工具窗口 89 4.2.5 键盘导航 90 技巧4.25 使用Alt+F7和Alt+Shift+F7移到下一个或前一个工具...
  • Java面试宝典2012版

    2012-12-03 21:57:42
    30、为什么 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1、xml有哪些解析技术?区别是什么? 113 2、你在项目中用到了xml技术的哪些方面?如何实现的? 114 3、jdom解析xml文件时如何解决中文问题?如何...

空空如也

空空如也

1 2 3 4 5 6
收藏数 116
精华内容 46
关键字:

为什么按空格键没有用