无准备,不编程——计算机达人成长之路(15)连载
8、俄罗斯方块(三)编码
嬉闹归嬉闹,最终二人静下心来,绍绍开始请教俄罗斯方块的设计,木鸿飞也不藏拙,马上开始讲解;“游戏其实分为三重循环,也就是可以分为三个部分。”
“哪三个?”绍绍问。
“我称之为外循环、中循环和内循环。其中外循环产生方块,循环内是一个方块从产生到落下到消失的全部生命周期,每循环一次肯定落下了一个方块。”木鸿飞道。
“恩,可以理解。”绍绍点点头,“外循环对应每一个方块。那么中循环呢?”。
“在游戏过程中,方块都会下落,对不对?中循环就是这个落下的过程,每循环一次,方块落下一格。”木鸿飞道。
“如果方块落到底了呢?是不是要判断消行了。可以你不是说中循环只负责落下一格吗?难道每一个落下都要判断消行处理?可是不对啊,明明只有落到最下面那一次循环才用消行?啊,我头晕了,想不清楚了。”绍绍摸着头,痛苦的说道。
“消行是外循环的事情好不好!外循环做四件事,分别是:产生方块、游戏结束判断和处理、调用中循环使方块落到底和落到低后的消行处理。”怕绍绍还不明白,木鸿飞在纸上画出了外循环的流程图。
“哦,你这么一画我就明白了。你为什么不早的画呢?还有为什么我刚刚会不明白呢?”绍绍打破沙锅问到底,颇有点十万个为什么的味道。
“我怎么知道。”木鸿飞给了绍绍一个白眼,随后想了想,说道:“可能是你的思路不够清晰,我们是在中循环时提及消行的,然后你就以为消行必须要在中循环中使用,千方百计希望在将它塞入中循环里,而它恰恰是外循环的内容,所以你才会思维混乱,发生短路。”
“好像是怎么回事。”绍绍赞同,“就是说设计的时候要眼观六路,耳听八方,随时联系前后的内容。”
“对,不过也不能以偏概全,有时候该不考虑的就不要考虑。”看到绍绍皱起了眉头,木鸿飞连忙打住,换了一种说法:“其实就是考虑它应该处于哪个模块中,如果处于现在正设计的模块中,那么我们无论如何也要设计它,否则就不要理睬它。比如当前我们正在设计中循环,而消行处理却是外循环的工作,所以可以忽略之。但是如果我们正在设计外循环,那么就必须的设计消行。”
“似懂非懂,还是回头继续说中循环吧。”绍绍说。
“中循环执行三件事,分别是:调用内循环、方块下落一格和判断方块是否已经到达即中循环是否接受。”木鸿飞一边说一边画出了中循环的流程图。
“懂了。再讲解内循环。”有了流程图就是好,极大的增强了绍绍的理解能力。
“内循环就是在方块下落一格的时间之内,循环的接收玩家的输入然后做出相应的处理。比如玩家输入左方向键则方块向左移动一格,玩家输入旋转键则旋转方块等等。当时间到达时内循环结束。”木鸿飞停顿了一下,继续说:“其实内循环的时间长短,就体现了游戏的难度,时间越长则难度越大。”
(笔者注:以上为DOS环境下面向过程的设计方法,如果需要移植到Windows中,则要重新按照消息处理的规则进行转换。如果需要面向对象设计,则需另外分析。)
“本来呢我离懂了还差那么一点点,但是听你这么一说呢,我有懂了一点点。看来你还是有把刷子的!”绍绍开始表演木鸿飞。
“哪里,哪里,不要崇拜哥,哥只是传说,而且哥会骄傲的。呵呵,其实我的程序代码还没有写出来。”千穿万穿,马屁不穿,被朋友PMP,木鸿飞连忙假装谦虚。
“下次你就拿着政治书去上机,电脑老师一看,肯定会问的,木同学,现在是计算机课,不是政治课,虽然你爱党爱国爱人民,可也不能拿着政治书编程序啊。但是,谁也没有想到,你的政治书上居然有流程图,凭借这些图,你硬是编出了俄罗斯方块,多牛啊!到时候……”绍绍帮助木鸿飞陷入憧憬之中。
“打住,停!如果照你说的做,我是不可能编出俄罗斯方块的。”木鸿飞斩钉截铁的说道。
“Why?”绍绍很时髦的问道。
“我现在还是个新手,水平没有你想象的那么高,只靠流程图还编不了程序,必须先在纸上写出代码,然后再敲进去,否则大脑会短路的。”
初学者要先写代码再敲代码,这叫不打无准备之战,编代码时可以事半功倍,所谓磨刀不误砍柴工就是这个道理。只可惜道理很简单,人人都知道,但却不会去遵守,正如交通规则人人都知道却不是人人都遵守一样,很多编程初学者嫌麻烦,不愿意这么做。
木鸿飞曾经为大一学生上过C语言课程,课堂上布置了程序设计题。但上机操作时,常常有很多学生空手而来,打开计算机却不知道干些什么,磨蹭了半天最后选择扫雷。
有的学生不扫雷,他们直接编代码,但敲出来的源程序真的不堪入目,不是这里少的,就是那边缺些,绞尽脑汁也生产不了几行,铃声一响,再一响,一节课过去了,看来匆忙上阵是不行的。
有的学生则谨慎些,他们会拿上教材,照着上面的习题答案敲打,却又常常敲错了字母,编译报错时只能一行一行的核对,如果碰上印刷错误或者作者失误,教材中的源代码本来就是错误的,就只有干坐在座位上等老师来解决了,看来不劳而获也是不行的。
只有极个别的同学带着笔记本过来,流程图画得清清楚楚,源代码写得整整齐齐,一看就知道课后自己做了分析和设计。他们直奔主题,手指如舞,伴随着富有节奏感的键盘敲击上,一行行代码如舞动的精灵在电脑上翩翩起舞。若是输入错误,或者源代码存在错误,都能很快的修改。毕竟是自己设计的程序,理解起来比学习教材上的要深刻许多。
有人说:编程序之前还要先把代码写在纸上,你欧特曼了!如今的程序那个不是动辄几万行,上十万行代码,都写在纸上,太不现实了,误人子弟!没错,真正的编程都是在头脑中思考,在键盘上完成,很少将代码记录在案的。但是,能够做到这些的都是什么人,是真正的程序员!他们哪个不在代码的海洋中浸泡过,岂是你一个小小的初学者可以比拟的。
记得上数学课,每当学习到新东西时,数学老师都要求学生们把每一个计算步骤都列举出来,一个也不能少,只有当熟练之后才可以简化流程。学习计算机也一样,初学者多几个步骤,可以省去很多弯路。即使是达人与木鸿飞者,在编码之前,也要先做好设计分析,画出系统图,在某些复杂的模块,甚至还要画出详细流程图,比如编写链表和指针时,还需要画出链表模型图,万事俱备,然后才开始输入代码。
无准备,不编程!
本文转自 zhuyunxiang 51CTO博客,原文链接:http://blog.51cto.com/zhuyunxiang/388617,如需转载请自行联系原作者
相关文章:

Memcached 缓存系统的-介绍、安装以及应用
一. memcached 是什么?memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.memcached是一个高性能的、分布式内存对象缓存系统&am…

被算法“监控”的打工人,这家公司 150 人被算法裁定为“不敬业”
整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 近日,一家公司通过 AI 算法裁掉三成员工的消息在网上引起热议。当你上班时突然收到一封邮件显示“效率低下”而要求马上离开公司,你会怎么想呢? 据 Game World Obser…

(转)I 帧和 IDR 帧的区别
I 帧和 IDR 帧的区别:http://blog.csdn.net/skygray/article/details/6223358 IDR 帧属于 I 帧。解码器收到 IDR frame 时,将所有的参考帧队列丢弃 (用x264_reference_reset 函数实现——在 encoder.c 文件中) 。这点是所有 I 帧…
ExtJs 备忘录(3)—— Form表单(三) [ 数据验证 ]
正文一、资料 1.1. 表单提示的方式设置,如: Ext.form.Field.prototype.msgTargetside 该设置为枚举值:qtip,side,title,under qtip:把鼠标移动到控件就可以显示提示信息了,有点像设置了title的input标签一样的效果…

Dynamo 以及一致性哈希简介
本介绍参考 Amazon 的 Dynamo 论文。需要更详细更准确信息的同学请直接阅读原文。 (原文地址http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) 这篇论文本身没提出什么新的思想,正如论文中所说,贡献在于把非常多的技术结…

如何更快速加载你的JS页面
确保代码尽量简洁 不要什么都依赖JavaScript。不要编写重复性的脚本。要把JavaScript当作糖果工具,只是起到美化作用。别给你的网站添加大量的JavaScript代码。只有必要的时候用一下。只有确实能改善用户体验的时候用一下。 尽量减少DOM访问 使用JavaScript访问DOM元…

性价比超高:苹果发布了新数据集,助力室内场景理解
作者:刘媛媛 来源:数据实战派前言计算机视觉界一直渴望能够找到一种方法,让计算机和人们都能够理解室内场景的复杂性。对于许多基本的场景理解任务,很难或不可能从真实图像中获得每像素地面实况标签。一部分研究人员选择通过使用交…

42. fastjson处理下划线和驼峰问题的方法和源码分析
一. 前言 在开发过程中经常遇到json解析和生成的问题,所以用自己也一直用fastjson来实现这个功能。 但是,最近遇到一个问题: json字符串里面的数据很多都是"_"下划线的比如,op_id。 而在java里面,很多都是驼峰的写法&…

Cacti Weathermap添加主机在线状态图示检测
Weathermap 中文名称翻译为 气象图weathermap版本支持:0.94及最新版1、首先添加气象图 图例像这样。编辑需要添加图例的气象图配置文件 (气象图配置文件默认在/var/www/html/plugins/weathermap/configs/ 目录中)其中 KEYPOS指定全局图例名称以及 图例位置和 图例标…

jquery技巧总结
一、简介1.1、概述随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype、YUI、jQuery、mootools、Bindows以及国内的JSVM框架等,通过将这些JS框架应用到我们的项目中能够使程序员从设计和书…

Unet网络实现叶子病虫害图像分割
作者|李秋键 出品|AI科技大本营(ID:rgznai100) 智能化农业作为人工智能应用的重要领域,对较高的图像处理能力要求较高,其中图像分割作为图像处理方法在其中起着重要作用。图像分割是图像分析的关键步骤, 在复杂的自然背景下进行图像分割, 难度较大。 在传…

SilverLight 4页面跳转大全
http://blog.csdn.net/lihaiyin/article/details/5674766 //Silverlight页面的跳转 //(Application.Current.RootVisual as IContent).Content new DragControl(); //普通页面跳转 HtmlWindow html HtmlPage.Window; //html.Navigate(new Uri("http://www.0379zd.co…

Linux 性能监控常用命令
工具简单介绍top查看进程活动状态以及一些系统状况vmstat查看系统状态、硬件和系统信息等iostat查看CPU 负载,硬盘状况sar综合工具,查看系统状况mpstat查看多处理器状况netstat查看网络状况iptraf实时网络状况监测tcpdump抓取网络数据包,详细…

jquery 1.6以上版本 全选
2019独角兽企业重金招聘Python工程师标准>>> <html xmlns"http://www.w3.org/1999/xhtml"> <head><title>全选,不全选,反选</title><script src"jquery.js" type"text/javascript"…

想提高代码水平,做到这点就够了
【CSDN 编者按】本篇文章来自于《程序员》杂志的一位老读者,他从大学时最深刻的记忆谈起,到编程路上的心得体会,再到对广大年轻程序员的建议,全篇娓娓道来,希望能对大家有所帮助。作者 | 姜宁 华为开源能力中心技术专…

modified: xxx(modified content, untracked content)
from:://http://blog.csdn.net/huguohu2006/article/details/7045052 提交代码到服务器后发现git clone下来的有些目录是空的。 查看服务器的目录果然是空的。看本季git add . 后查看git status modified: xxx(modified content, untracked content) 大概意思是xxx目录没有…

一些JSON相关的函数
JSON作为一种轻量的数据传输格式,越来越受到人们的青睐。下面是我仿照Prototype的一些实现。 JSONFilter:/^///*-secure-([/s/S]*)/*///s*$/, unfilterJSON:function(json,filter) { return json.replace((filter || dom.JSONFilter), function(a,b){ return b |…

太任性!17 岁少年买不到回国机票,因“泄愤”攻击航司系统,被判刑 4 年
整理 | 王晓曼出品 | 程序人生(ID:coder _life)因买不到回国机票,一气之下,身处境外的17岁少年陈某竟多次、持续攻击某航空公司计算机系统,致使该航空公司对外服务网络全面瘫痪近四小时,5000余万…

hbase2.0.0-安装部署
依赖hadoop 环境,我这边的版本是hadoop-2.6.5 选择hbase2.0.0版本的时候,去官网查看支持的hadoop版本 1、伪分布式安装 下载:http://mirror.bit.edu.cn/apache/hbase/2.0.0-alpha4/ 版本:hbase-2.0.0-alpha4-bin.tar.gz 2、tar -z…

Git详解之二 Git基础
Git 基础 读完本章你就能上手使用 Git 了。本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令。读完本章,你就能初始化一个新的代码仓库,做一些适当配置;开始或停止跟踪某些文件…

一致性哈希(Consistent Hashing)
在大型web应用中,缓存可算是当今的一个标准开发配置了。在大规模的缓存应用中,应运而生了分布式缓存系统。分布式缓存系统的基本原理,大家也有所耳闻。key-value如何均匀的分散到集群中?说到此,最常规的方式莫过于hash…

CT片居然可以这么玩:用头部CT断层扫描片复原三维头像
作者:天元浪子 来源:Python作业辅导员前言CT是现代医学影像的主力设备,寻常百姓并不陌生。通常,一张CT片由多张连续断层扫描的图像组成。在医生眼中,CT片展示了人体器官的形态和性质,是判断病人健康状况的重…

Nginx学习笔记(一) Nginx架构
Nginx全程是什么? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 daemon守护线程 nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master…

PXE实现批量部署linux系统
pxe批量部署linux服务器1、pxe介绍PXE是有intel设计的协议,它可以使计算机通过网络启动,协议分为client和server两端,PXEclient在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存中执行,并显示出命令…

首场见习挑战赛倒计时3天!20000元奖学金瓜分就等你了!
CSDN软件开发精英赛是基于“C认证—软件工程师能力认证考试”而设立的编程比赛,大赛联合广大科技企业设置丰厚礼品及30万元奖学金。从7月22日官宣到今日,短短一个月内,大赛已经吸引了来自全国的2000+开发者参与其中。第一轮“见习…

一致性哈希算法以及其PHP实现
在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time…

Linux入门(四)
目录: 1234567891011121314一、根文件系统层级标准FHS二、bash的基础特性(一)1.命令历史 2.命令行补全 3.路径补全 4.命令行展开 5.命令执行的状态结果 6.引用 7.快捷键 三、目录管理相关命令mkdir、rmdir、tree四、引用命令的执行结果五、文…

OSI[七层]与TCP/IP[四层]模型简述简图
OSI参考模型(OSI/RM)的全称是开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它是由国际标准化组织(International Standard Organization,ISO…

中国国际消费电子博览会拥抱转型,全新面貌拭目以待!
2021年9月24—26日,第十九届中国国际消费电子博览会(简称电博会)将在青岛国际会展中心隆重举行,如今距离电博会开幕已不到3个月的时间,全国各地的参展企业跃跃欲试、积极筹备。 长久以来,电博会为全球消费…

Fragment提交transaction导致state loss异常
下面自从Honeycomb发布后,下面栈跟踪信息和异常信息已经困扰了StackOverFlow很久了。 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.j…