C语言编写俄罗斯方块论文

时间:2019-05-12 00:12:03下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言编写俄罗斯方块论文》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言编写俄罗斯方块论文》。

第一篇:C语言编写俄罗斯方块论文

俄罗斯方块

学 号:

班 级:

姓 名:

指导教师:

完成日期:2012年5月

1.引言..............................................................................................................................................1

1.1开发工具............................................................................................................................1 1.1.1 C是中级预言......................................................................................................1

1.1.2 C是结构化语言..................................................................................................1 1.1.3 C语言功能齐全..................................................................................................1 1.1.4 C语言可移植性好..............................................................................................1 游戏设计......................................................................................................................................2

2.1游戏设计要求....................................................................................................................2

2.1.1.设计题目:俄罗斯方块游戏.............................................................................2

2.1.2.设计内容:.........................................................................................................2 2.1.3.功能模块划分:.................................................................................................2 2.2 游戏设计思想...................................................................................................................2

2.2.1游戏界面:............................................................................................................2 2.2.2 设计思路.......................................................................................................................2 2.3:游戏功能......................................................................................................................3 2.3.1:开始部分...........................................................................................................3

2.3.2.运行部分...............................................................................................................3

3.实验总结:..................................................................................................................................4

3.1 开发背景与需求分析.......................................................................................................4 3.2 系统功能介绍...................................................................................................................4 4.核心代码:................................................................................................................................8 总结................................................................................................................................................21 参考文献:....................................................................................................................................22

基于C语言的俄罗斯方块游戏

[摘要]:俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。[关键词]:C语言;心得体会;影响

1.引言 随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界.人们不在拘泥于一小块天地.加班,出差成了现代人不可避免的公务.而此时一款可以随时随地娱乐的游戏成了必需品.在手机和电脑成为人们日用品的社会,一款能在其上能便捷运行的游戏成为买家的参考点.现在我们所要设计的这一款基于C语言的游戏——贪吃蛇,就是满足以上要求而设计出来的,希望能给玩家带来娱乐.贪吃蛇这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人.这一款游戏紧紧地抓住了人们的心理,虽然简单,却起乐无穷,在人们不断追求更多的欲望下,该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具.1.1开发工具

《C/C++程序设计学习与试验系统》

该系统继承了Turbo C2.0/C++3.0、GCC、Visua C++6.0这四种常见的编译器,可以很好满足目前主流的C语言教材的实验需求。

C语言具有下列特点:

1.1.1 C是中级预言

它把高级语言的基本结构和语句与低级语言的实用性结合起来,C语言可以像汇编语言一样对位、字节和地址进行操作,通常还是称C为高级语言。

1.1.2 C是结构化语言

结构化语言的特点是程序的各个部分除了必要地数据交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用,维护及调试。

1.1.3 C语言功能齐全

C语言具有多种数据类型,并引入了指针概念,可使程序效率更高;C语言也具有强大的图形功能;具有较强的计算功能、逻辑判断功能。

1.1.4 C语言可移植性好

与汇编语言相比,C语言程序适用范围大,可用于各种操作系统和各种型号的计算机。游戏设计

2.1游戏设计要求

2.1.1.设计题目:俄罗斯方块游戏 2.1.2.设计内容:

一组由4个小型正方形组成的规则图形,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。通过设计者预先设置的随机发生器不断地输出单个方块到场地顶部,以一定的规则进行移动、旋转、下落和摆放,锁定并填充到场地中。每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响。如果未被消除的方块堆放的高度超过场地所规定的最大高度则游戏结束。

2.1.3.功能模块划分:

系统功能模块

2.2 游戏设计思想

2.2.1游戏界面:

方块堆积。遇整则消。

2.2.2 设计思路

1、一个用于摆放小型正方形的平面虚拟场地,其标准大小:行宽为10,列高为20,以每个小正方形为单位。2.、一组由4个小型正方形组成的规则图形,英文称为Tetromino,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。I:一次最多消除四层

J(左右):最多消除三层,或消除二层

L:最多消除三层,或消除二层

O:消除一至二层

S(左右):最多二层,容易造成孔洞

Z(左右):最多二层,容易造成孔洞

T:最多二层

(1)部分游戏有单格方块,可以穿透固定的方块到达最下层空位。其他的改版中出现更多特别的造型。

方块会从区域上方开始缓慢继续落下。

(2)玩家可以做的操作有:以90度为单位旋转方块,以格子为单位左右移动方块,让方块加速落下。

(3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。

(4)当区域中某一列横向格子全部由方块填满,则该列会消失并成为玩家的得分。同时删除的列数越多,得分指数上升。

(5)当固定的方块堆到区域最上方而无法消除层数时,则游戏结束。

(6)一般来说,游戏还会提示下一个要落下的方块,熟练的玩家会计算到下一个方块,评估现在要如何进行。由于游戏能不断进行下去对商业用游戏不太理想,所以一般还会随着游戏的进行而加速提高难度。

3、通过设计者预先设置的随机发生器不断地输出单个方块到场地顶部,以一定的规则进行移动、旋转、下落和摆放,锁定并填充到场地中。每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响。

4、如果未被消除的方块堆放的高度超过场地所规定的最大高度(并不一定是20或者玩家所能见到的高度),则游戏结束。

具体到每一款不同的游戏,其中的细节规则都可能有千差万别,但是以上的基本规则是相同的。

2.3:游戏功能

2.3.1:开始部分

游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面。标题画面以后,还要为游戏的运行部分作初始化,包括绘制游戏运行时的背景,对游戏某些重 要变量的初始化。

2.3.2.运行部分

俄罗斯方块的要求为:不同形状组合的方块从界面上方落下。通过键盘上的四个光标控制方块下落时的形状转换和下落方向。方块堆积在一起,将区域占满时则会消除以增加

游戏分数。

整个游戏过程分为三个步骤:

1、按游戏界面的“开始”按钮或者F2键来开始游戏,自己使用右边的窗口,对手使用左边的窗口

2、键盘操作:系统缺省设置使用右边的窗口,用光标操作,“←”左移一格;“→”右移一格;“↑”旋转方块;↓ 方块丢下(方块下落到底),“End”健可以一格格的下落,用户还可以自定义习惯的按键来操作游戏。

3、计分牌显示的内容:“分数”为双方本局的分数,计分标准为下落一个块10分,一次消一行100分、2行200分、3行400分、4行800分。等级”为双方的游戏设置等级,当分数达到一定的值,等级就会提升、速度加快。“行数”第一行为双方消的行数,第二行是送给对方的行数。“比分”为双方赢的局数。2.3.3:结束部分:

游戏结束时,显示“GAME OVER”

3.实验总结:

3.1 开发背景与需求分析

随着网络技术的发展,人们的生活越来越离不开网络,网络给人们带来了各种各样的信息和更多更新的娱乐。据统计。每天上网的人群中75%的人用来丰富自己的生活。其中游戏最为常见和普遍。所以,这次课程设计我想实现一个小游戏:俄罗斯方块。需求分析

1)游戏面板(画布)GameCanvas类,完成游戏显示; 2)方块绘画drawUnit类,方块下落过程中的各种形态;

3)主界面实现游戏的开始,退出,暂停,提高级数,降低级数功能及图像界面排版;

4)通过键盘按键实现游戏,并且可以调节游戏速度。

3.2 系统功能介绍

俄罗斯方块是一个非常复杂但比较有趣并且耐玩的游戏,相信很多人对俄罗斯方块并不陌生,如下图所示,游戏中共有七种方块,每种方块都有四个方格组成。

这七种方块可以旋转90度、180度、270度,因此每种方块有四种状态,七种方块总有28种状态,这28种状态的方块随机产生,自由下落,落下时可由玩家通过键盘上的上、下、左、右控制键来控制方块的反转、移动和加速下落。如果下落时,方块填满某一行则这一行消失,同时给玩家加分,若由存在空格的方块填满整个窗口,则游戏结束。

图1-1 初始状态

图1-2 开始游戏

图1-3 消除一行

图1-4 消除两行

图1-5 消除四行

图1-6 游戏结束

4.核心代码:

import java.awt.*;import java.awt.event.*;

//俄罗斯方块类

public class computer extends Frame { public static boolean isPlay = false;public static int level = 1, score = 0;public static TextField scoreField, levelField;

public static MyTimer timer;GameCanvas gameScr;//声明一个属于画布类得变量 public static void main(String[] argus){ computer ers = new computer(“俄罗斯方块游戏 V1.0 Author:Vincent”);//运用构造方法为框架名

WindowListener win_listener = new WinListener();//定义一个窗口监听事件对象

ers.addWindowListener(win_listener);//为框架添加该监听器 }

computer(String title)// 俄罗斯方块类的构造方法 { super(title);//调用父类得构造方法

setSize(600, 480);//设置框架的尺寸

setLayout(new GridLayout(1, 2));//设置框架的布局流

gameScr = new GameCanvas();gameScr.addKeyListener(gameScr);//为该对象注册键盘点击监听器

timer = new MyTimer(gameScr);timer.setDaemon(true);timer.start();timer.suspend();

add(gameScr);

Panel rightScr = new Panel();rightScr.setLayout(new GridLayout(2, 1, 0, 30));rightScr.setSize(120, 500);add(rightScr);

// 右边信息窗体的布局

MyPanel infoScr = new MyPanel();infoScr.setLayout(new GridLayout(4, 1, 0, 5));infoScr.setSize(120, 300);rightScr.add(infoScr);

// 定义标签和初始值

Label scorep = new Label(“分数:”, Label.LEFT);Label levelp = new Label(“级数:”, Label.LEFT);scoreField = new TextField(8);levelField = new TextField(8);scoreField.setEditable(false);levelField.setEditable(false);infoScr.add(scorep);

infoScr.add(scoreField);infoScr.add(levelp);infoScr.add(levelField);scorep.setSize(new Dimension(20, 60));scoreField.setSize(new Dimension(20, 60));levelp.setSize(new Dimension(20, 60));levelField.setSize(new Dimension(20, 60));scoreField.setText(“0”);levelField.setText(“1”);

// 右边控制按钮窗体的布局

MyPanel controlScr = new MyPanel();controlScr.setLayout(new GridLayout(5, 1, 0, 5));rightScr.add(controlScr);

// 定义按钮play Button play_b = new Button(“开始游戏”);play_b.setSize(new Dimension(50, 200));play_b.addActionListener(new Command(Command.button_play, gameScr));

// 定义按钮Level UP Button level_up_b = new Button(“提高级数”);level_up_b.setSize(new Dimension(50, 200));level_up_b.addActionListener(new Command(Command.button_levelup, gameScr));

// 定义按钮Level Down Button level_down_b = new Button(“降低级数”);level_down_b.setSize(new Dimension(50, 200));level_down_b.addActionListener(new Command(Command.button_leveldown, gameScr));

// 定义按钮Level Pause Button pause_b = new Button(“游戏暂停”);pause_b.setSize(new Dimension(50, 200));pause_b.addActionListener(new

Command(Command.button_pause,gameScr));

// 定义按钮Quit Button quit_b = new Button(“退出游戏”);quit_b.setSize(new Dimension(50, 200));quit_b.addActionListener(new Command(Command.button_quit, gameScr));

controlScr.add(play_b);controlScr.add(level_up_b);controlScr.add(level_down_b);controlScr.add(pause_b);controlScr.add(quit_b);setVisible(true);gameScr.requestFocus();} }

// 重写MyPanel类,使Panel的四周留空间 class MyPanel extends Panel { public Insets getInsets(){ return new Insets(30, 50, 30, 50);} }

// 游戏画布类

class GameCanvas extends Canvas implements KeyListener { final int unitSize = 30;// 小方块边长 int rowNum;// 正方格的行数 int columnNum;// 正方格的列数

int maxAllowRowNum;// 允许有多少行未削 int blockInitRow;// 新出现块的起始行坐标 int blockInitCol;// 新出现块的起始列坐标 int[][] scrArr;// 屏幕数组 Block b;// 对方快的引用

// 画布类的构造方法 GameCanvas(){ rowNum = 15;columnNum = 10;maxAllowRowNum = rowNum1;blockInitCol = columnNum / 2(row + 1)* unitSize, unitSize, unitSize, true);g.dispose();}

public Block getBlock(){ return b;// 返回block实例的引用 }

// 返回屏幕数组中(row,col)位置的属性值 public int getScrArrXY(int row, int col){ if(row < 0 || row >= rowNum || col < 0 || col >= columnNum)return(-1);else return(scrArr[row][col]);}

// 返回新块的初始行坐标方法 public int getInitRow(){ return(blockInitRow);// 返回新块的初始行坐标 }

// 返回新块的初始列坐标方法 public int getInitCol(){ return(blockInitCol);// 返回新块的初始列坐标 }

// 满行删除方法

void deleteFullLine(){ int full_line_num = 0;int k = 0;

for(int i = 0;i < rowNum;i++){ boolean isfull = true;

L1: for(int j = 0;j < columnNum;j++)if(scrArr[i][j] == 0){ k++;isfull = false;break L1;} if(isfull)full_line_num++;if(k!= 0 && k1, j, 0);else drawUnit(k1][j] = scrArr[i][j];} } for(int i = k1)){

dispBlock(0);col--;dispBlock(1);} }

// 实现块的右移

public void rightMove(){ if(assertValid(blockType, turnState, row, col + 1)){ dispBlock(0);col++;dispBlock(1);} }

// 实现块落下的操作的方法 public boolean fallDown(){ if(blockState == 2)return(false);if(assertValid(blockType, turnState, rowi, col + j);if(temp < 0 || temp == 2)return false;} k = k >> 1;} } return true;}

// 同步显示的方法

public synchronized void dispBlock(int s){ int k = 0x8000;for(int i = 0;i < 4;i++){ for(int j = 0;j < 4;j++){ if(((int)pattern[blockType][turnState] & k)!= 0){ scr.drawUnit(rowcomputer.level + 1)* 100);} catch(InterruptedException e){ } if(!scr.getBlock().fallDown()){ scr.deleteFullLine();if(scr.isGameEnd()){ computer.isPlay = false;suspend();} else scr.getBlock().reset();} } } }

class WinListener extends WindowAdapter { public void windowClosing(WindowEvent l){ System.exit(0);} } 总结

1感悟:当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在这么长的时间里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。

我做的是做俄罗斯方块游戏。简单的一个,但对我来说却是一个很大的困难。更加是第一次做基于C语言的课程设计,所以连续几天翻阅书籍或是参考网上内容却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候

没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以一下一步就是开始正式的编程序了。不过毕竟水平有限,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。经过一波三折,终于开始正式编程。

而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,所以就在网上下载的程序的基础上开始行动了,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。

通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。

在该游戏设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。

2感谢:经过两个星期的苦心钻研,系统终于制作完毕。在本次课程设计中困难遇到不少,也让我学到了很多。在这次系统开发的过程中,我深深地体会到了做一个系统,首先进行需求分析的重要性。了解了一个系统的制作,从功能分析到功能模块分析,与其他系统的关系,这些都有待以后进一步的改进。通过实践对我以后的学习是一笔不小的财富!

在此,感谢班上同学对我的帮助和指点,没有他们所提供的资料,仅凭我个人力量,在短短的两周时间里是很难完成这个设计的。更要感谢的是我的老师,感谢老师孜孜不倦的教诲,一丝不苟的精神和一视同仁的教学风格。我会仅记老师的教诲,一步一个脚印的完成自己的学业!

参考文献:

[1].裘宗燕 著,从问题到程序科学出版社,北京大学出版社,1999年4月。[2].《C程序设计(第二版)》,谭浩强编,清华大学出版社,1999年12月。[3].《C语言编程常见问题解答》,[美]Paul S.R.Chishohm等著,张芳妮 吕波译,清华大学出版社,11996年12月。[4].《The C Programming Language》,by Brian W.Kernighan and Dennis M.Ritchie.,Pubilished by Prentice-Hall in 1988。

[5].朱若愚.数据结构[M].北京: 电子工业出版社, 2006.1

[6].傅清祥,王晓东.数据结构与算法设计[M].北京: 电子工业出版社, 2006.3 [7].李春葆.数据结构(C语言版)习题与解析[M].北京:清华大学出版社, 2006.1 [8].刘大有.数据结构[M].北京: 高等教育出版社, 2006.3 [9].王敬华,陈静.C语言程序设计[M].北京: 清华大学出版社, 2007.10 [10].徐孝凯.数据结构简明教程.[M].北京: 清华大学出版社, 2006.04

课程设计俄罗斯方块游戏源代码

本程序共三个类,建一个包 square。把三个类都封装到一个包里面,三个类分别是

Controller,Main,Square

package square;import javax.swing.JPanel;import java.awt.Color;

// 事倒入java程序所需要的类库文件。如果不倒入相应的文件。java程序是会报错的。import javax.swing.JLabel;public class Controller extends Thread //Controller类从定义从父类继承来来的某些成员变量和成员方法,游戏控制线程

private int x;

//方块左上角的坐标

private int y;

private Square sq;

//方块对象的引用当前

private Square next;

//下一个方块的引用

private JPanel[][] sc;

//显示

private boolean[][] state;

//填充状态

private int sorce;

//分值

private int speed;

//下落速度

private JLabel jl1;

//分数速度提示

private JLabel jl2;

private JPanel jp;

//下一个方块提示

private JPanel[][] sc2;

private int sleepTime;

//等待时间

public Controller(int x, int y, JPanel[][] sc, boolean[][] state,//构造器

传递引用

int sorce, int speed, JLabel jl1, JLabel jl2,JPanel jp, JPanel[][] sc2){

this.x = x;

this.y = y;

this.sc = sc;

this.state = state;

this.sorce = sorce;

this.speed = speed;

this.jl1 = jl1;

this.jl2 = jl2;

this.jp = jp;

this.sc2 = sc2;

this.sleepTime = 200;

sq = new Square((int)(Math.random()* 4)+ 1);

next = new Square((int)(Math.random()* 4)+ 1);

}

public void init(){

for(int i = 0;i < state.length;i++){

for(int j = 0;j < state[i].length;j++){

state[i][j] = false;

}

}

update();

}

@Override

public void run()

//重设run()方法

{

while(true){

try {

if(!isGameOver()){

if(isHit()){

set();

} else {

fall();

}

check();

update();

Thread.sleep(sleepTime);

} else {

break;

}

} catch(InterruptedException e){

e.printStackTrace();

}

}

}

private void set()

//码放方块

{

for(int i = 0;i < 4;i++){

for(int j = 0;j < 4;j++){

if(sq.getState(i, j)== true){

state[i + x][y + j] = true;

}

}

}

x = 0;

y = 0;

sq = next;

next = new Square((int)(Math.random()* 4)+ 1);

sleepTime = 1000 /(speed + 2);

}

private void update()

//更新数据

{

for(int i = 0;i < sc.length;i++){

for(int j = 0;j < sc[i].length;j++){

if(state[i][j] == true){

sc[i][j].setBackground(Color.BLUE);

} else {

sc[i][j].setBackground(Color.WHITE);}

}

for(int i = 0;i < 4;i++){

for(int j = 0;j < 4;j++){

if(sq.getState(i, j)){

sc[i + x][j + y].setBackground(Color.BLUE);

}

}

}

for(int i = 0;i < sc2.length;i++){

for(int j = 0;j < sc2[i].length;j++){

if(next.getState(i, j)){

sc2[i][j].setBackground(Color.BLUE);

} else {

sc2[i][j].setBackground(Color.WHITE);

}

}

}

}

private boolean isHit()

//下落碰撞判断

{

for(int i = 0;i < 4;i++){

for(int j = 0;j < 4;j++){

if(sq.getState(i, j)&&(x + i == 19 || state[i + x + 1][j + y])){

return true;

}

}

}

return false;

}

private void fall()

//下落

{

x++;

}

private boolean isLeftHit()

//左移碰撞判断

{

if(y == 0){

return true;

}

for(int i = 0;i < 3;i++){

for(int j = 0;j < 3;j++){

if(sq.getState(i, j)&& state[x + i][y + j1][j];

}

}

sorce += 10;

speed = sorce / 100;

jl1.setText(String.valueOf(sorce));

jl2.setText(String.valueOf(speed));

sleepTime = 1000 /(speed + 2);

} catch(InterruptedException e){

e.printStackTrace();

}

}

}

}

public void moveLeft()

//向左

{

if(!isLeftHit()){

state[x][y] = false;

y--;

}

}

private boolean isRightHit()

//右移碰撞判断

{

for(int i = 0;i < 3;i++){

for(int j = 0;j < 3;j++){

if(sq.getState(i, j)&&(y + j >= 9 || state[x + i][y + j + 1])){

return true;

}

}

}

return false;

}

public void moveRight()//向右

{

if(!isRightHit()){

state[x][y] = false;

y++;

}

}

public void rot()

//旋转

{

sq.rot();

}

public void down()

//加速向下

{

sleepTime = 20;}

}

package square;import javax.swing.*;import java.awt.*;public class Main extends javax.swing.JFrame { private static final long serialVersionUID = 1L;private JPanel sc[][];

private JPanel sc2[][];

private boolean state[][];

Controller t;

/** Creates new form Square */

public Main()

{

initComponents();

sc = new JPanel[20][10];

sc2 = new JPanel[4][4];

state = new boolean[25][15];

jPanel1.setLayout(new GridLayout(20, 10, 2, 2));

jPanel3.setLayout(new GridLayout(4, 4, 2, 2));

jPanel3.setSize(150, 150);

for(int i = 0;i < sc.length;i++){

for(int j = 0;j < sc[i].length;j++){

sc[i][j] = new JPanel();

// sc[i][j].setSize(20, 20);

sc[i][j].setBackground(Color.WHITE);

jPanel1.add(sc[i][j]);

}

}

for(int i = 0;i < sc2.length;i++){

for(int j = 0;j < sc2[i].length;j++){

sc2[i][j] = new JPanel();

// sc2[i][j].setSize(20, 20);

sc2[i][j].setBackground(Color.WHITE);

jPanel3.add(sc2[i][j]);

}

}

jLabel3.setText(“0”);

jLabel4.setText(“0”);

this.setSize(460, 650);

}

/** This method is called from within the constructor to

* initialize the form.* WARNING: Do NOT modify this code.The content of this method is

* always regenerated by the Form Editor.*/

private void initComponents(){

jPanel2 = new javax.swing.JPanel();

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

jLabel4 = new javax.swing.JLabel();

jButton1 = new javax.swing.JButton();

jPanel1 = new javax.swing.JPanel();

jButton2 = new javax.swing.JButton();

jButton3 = new javax.swing.JButton();

jMenuBar1 = new javax.swing.JMenuBar();

jMenu1 = new javax.swing.JMenu();

jMenuItem1 = new javax.swing.JMenuItem();

jMenu2 = new javax.swing.JMenu();

jMenuBar2 = new javax.swing.JMenuBar();

jMenu3 = new javax.swing.JMenu();

jMenuItem2 = new javax.swing.JMenuItem();

jMenu4 = new javax.swing.JMenu();

jPanel3 = new javax.swing.JPanel();

jButton4 = new javax.swing.JButton();

jMenuBar3 = new javax.swing.JMenuBar();

jMenu5 = new javax.swing.JMenu();

jMenuItem3 = new javax.swing.JMenuItem();

jMenu6 = new javax.swing.JMenu();

jButton5 = new javax.swing.JButton();

jMenuBar4 = new javax.swing.JMenuBar();

jMenu7 = new javax.swing.JMenu();

jMenuItem4 = new javax.swing.JMenuItem();

jMenu8 = new javax.swing.JMenu();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setMinimumSize(new java.awt.Dimension(400, 550));

jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());

jLabel1.setText(“Score”);

jLabel2.setText(“Speed”);

jLabel3.setText(“jLabel3”);

jLabel4.setText(“jLabel4”);

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);

jPanel2.setLayout(jPanel2Layout);

jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addContainerGap()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addComponent(jLabel1)

.addGap(18, 18, 18)

.addComponent(jLabel3))

.addGroup(jPanel2Layout.createSequentialGroup()

.addComponent(jLabel2)

.addGap(18, 18, 18)

.addComponent(jLabel4)))

.addContainerGap(35, Short.MAX_VALUE)));

jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addContainerGap()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel1)

.addComponent(jLabel3))

.addGap(18, 18, 18)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel2)

.addComponent(jLabel4))

.addContainerGap(84, Short.MAX_VALUE)));

jButton1.setText(“Start”);

jButton1.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton1ActionPerformed(evt);

}

});

jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

jPanel1.setMinimumSize(new java.awt.Dimension(300, 500));

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);

jPanel1.setLayout(jPanel1Layout);

jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 291, Short.MAX_VALUE));

jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 504, Short.MAX_VALUE));

jButton2.setText(“L”);

jButton2.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton2ActionPerformed(evt);

}

});

jButton3.setText(“R”);

jButton3.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton3ActionPerformed(evt);

}

});

jMenu1.setText(“File”);

jMenuItem1.setText(“Start”);

jMenu1.add(jMenuItem1);

jMenuBar1.add(jMenu1);

jMenu2.setText(“Edit”);

jMenuBar1.add(jMenu2);

jMenu3.setText(“File”);

jMenuItem2.setText(“Start”);

jMenu3.add(jMenuItem2);

jMenuBar2.add(jMenu3);

jMenu4.setText(“Edit”);

jMenuBar2.add(jMenu4);

jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());

jPanel3.setMinimumSize(new java.awt.Dimension(120, 120));

jPanel3.setPreferredSize(new java.awt.Dimension(120, 120));

javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);

jPanel3.setLayout(jPanel3Layout);

jPanel3Layout.setHorizontalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 135, Short.MAX_VALUE));

jPanel3Layout.setVerticalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 116, Short.MAX_VALUE));

jButton4.setText(“Rot”);

jButton4.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton4ActionPerformed(evt);

}

});

jMenu5.setText(“File”);

jMenuItem3.setText(“Start”);

jMenu5.add(jMenuItem3);

jMenuBar3.add(jMenu5);

jMenu6.setText(“Edit”);

jMenuBar3.add(jMenu6);

jButton5.setText(“D”);

jButton5.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jButton5ActionPerformed(evt);

}

});

jMenu7.setText(“File”);

jMenu7.addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(java.awt.event.ActionEvent evt){

jMenu7ActionPerformed(evt);

}

});

jMenuItem4.setText(“Start”);

jMenu7.add(jMenuItem4);

jMenuBar4.add(jMenu7);

jMenu8.setText(“Edit”);

jMenuBar4.add(jMenu8);

setJMenuBar(jMenuBar4);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addComponent(jPanel1,javax.swing.GroupLayout.PREFERRED_SIZE,295, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jPanel2,javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(jPanel3, Short.MAX_VALUE)

.addComponent(jButton4,javax.swing.GroupLayout.DEFAULT_SIZE, 139,javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)

.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()

.addComponent(jButton2)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jButton5)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jButton3)))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, Short.MAX_VALUE)))

.addContainerGap()));

layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addComponent(jPanel2,javax.swing.GroupLayout.PREFERRED_SIZE,10,javax.swing.GroupLayout.Alignment.LEADING,javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jPanel3,javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(44, 44, 44)

.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

javax.swing.GroupLayout.PREFERRED_SIZE,33,.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(63, Short.MAX_VALUE))

.addComponent(jPanel1,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE,38, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));

pack();

}

//

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t = new Controller(0, 0, sc, state, 0, 0, jLabel3, jLabel4, jPanel3, sc2);

t.init();

t.start();}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.moveLeft();}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.moveRight();}

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.rot();}

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.down();

}

private void jMenu7ActionPerformed(java.awt.event.ActionEvent evt){

// TODO add your handling code here:

t.init();}

/**

* @param args the command line arguments

*/

public static void main(String args[]){

java.awt.EventQueue.invokeLater(new Runnable(){

public void run(){

new Main().setVisible(true);

}

});

}

// Variables declaration-do not modify

private javax.swing.JButton jButton1;

private javax.swing.JButton jButton2;

private javax.swing.JButton jButton3;

private javax.swing.JButton jButton4;

private javax.swing.JButton jButton5;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

private javax.swing.JMenu jMenu1;

private javax.swing.JMenu jMenu2;

private javax.swing.JMenu jMenu3;

private javax.swing.JMenu jMenu4;

private javax.swing.JMenu jMenu5;

private javax.swing.JMenu jMenu6;

private javax.swing.JMenu jMenu7;

private javax.swing.JMenu jMenu8;

private javax.swing.JMenuBar jMenuBar1;

private javax.swing.JMenuBar jMenuBar2;

private javax.swing.JMenuBar jMenuBar3;

private javax.swing.JMenuBar jMenuBar4;

private javax.swing.JMenuItem jMenuItem1;

private javax.swing.JMenuItem jMenuItem2;

private javax.swing.JMenuItem jMenuItem3;

private javax.swing.JMenuItem jMenuItem4;

private javax.swing.JPanel jPanel1;

private javax.swing.JPanel jPanel2;

private javax.swing.JPanel jPanel3;

// End of variables declaration

}

package square;public class Square {

boolean[][][] state;

int condition;

//定义多种情况

public Square(int kind)

//

定义多种类型

{

state = new boolean[4][4][4];

condition = 0;

switch(kind){

case 1:

//方形

每个case之后应该有个break;否则在满足条件之后会继续向后进行会跳出

state[0][0][0] = true;

state[0][0][1] = true;

state[0][1][0] = true;

state[0][1][1] = true;

state[1][0][0] = true;

state[1][0][1] = true;

state[1][1][0] = true;

state[1][1][1] = true;

state[2][0][0] = true;

state[2][0][1] = true;

state[2][1][0] = true;

state[2][1][1] = true;

state[3][0][0] = true;

state[3][0][1] = true;

state[3][1][0] = true;

state[3][1][1] = true;

break;

case 2:

//I型

state[0][0][0] = true;

state[0][1][0] = true;

state[0][2][0] = true;

state[0][3][0] = true;

state[1][0][0] = true;

state[1][0][1] = true;

state[1][0][2] = true;

state[1][0][3] = true;

state[2][0][0] = true;

state[2][1][0] = true;

state[2][2][0] = true;

state[2][3][0] = true;

state[3][0][0] = true;

state[3][0][1] = true;

state[3][0][2] = true;

state[3][0][3] = true;

break;

case 3:

//L型

state[0][0][0] = true;

state[0][1][0] = true;

state[0][2][0] = true;

state[0][2][1] = true;

state[1][0][2] = true;

state[1][1][0] = true;

state[1][1][1] = true;

state[1][1][2] = true;

state[2][0][0] = true;

state[2][0][1] = true;

state[2][1][1] = true;

state[2][2][1] = true;

state[3][0][0] = true;

state[3][0][1] = true;

state[3][0][2] = true;

state[3][1][0] = true;

break;

case 4:

//T型

state[0][0][0] = true;

state[0][0][1] = true;

state[0][0][2] = true;

state[0][1][1] = true;

state[1][0][1] = true;

state[1][1][0] = true;

state[1][1][1] = true;

state[1][2][1] = true;

state[2][0][1] = true;

state[2][1][0] = true;

state[2][1][1] = true;

state[2][1][2] = true;

state[3][0][0] = true;

state[3][1][0] = true;

state[3][1][1] = true;

state[3][2][0] = true;

break;

}

}

public boolean getState(int i, int j)//获得是否为声明的i,j变量的值

{

return state[condition][i][j];

}

public void rot(){

condition =(condition + 1)% 4;

} }

第二篇:个人简历html语言编写

课后练习题五

姓 名 性别 出生年月 照片
毕业院校 专业 学历
政治面貌 民族 身高
健康状况 籍贯
身份证号码 联系电话
主修课程
英语水平
计算机水平
社会实践
奖励情况
自我评价

第三篇:如何编写和语言程序解读

如何编写和汇编语言程序

可以用普通文本编辑器编辑汇编语言源程序。常用的有 MS-DOS 下的 EDIT 文本编辑程序,Windows 下的写字板(WORDPAD.EXE)等。用户通过屏幕编辑程序键入源程序,检查无误,可将源程序存到汇编系统盘上,该程序的扩展名为· ASM。软件运行基本环境

运行汇编程序必备的软件环境: DOS 操作系统;汇编系统。汇编系统盘应包含如下文件: MASM 宏汇编程序文件 LISK 连接程序文件

CRFF 索引程序文件(也可不用)汇编源程序编写)源程序的书写格式

当 CPU 访问内存时,是把存储器分成若干个段,通过 4 个段寄存器中存放的地址对内存储器访问,因此在编源程序时必须按段的结构来编制程序。由于每个段的物理空间为≤ 64KB,所以程序中各段可以分别为一个或几个。源程序的书写一般有如下形式:

逻辑堆栈段 堆栈段名 SEGMENT STACK 用变量定义预置的堆栈空间 · ·

堆栈段名 ENDS 逻辑数据段 数据段名 SEGMENT 用变量定义预置的数据空间 · ·

数据段名 ENDS 逻辑代码段 代码段名 SEGMENT ASSUME 定义各段寻址关系 过程名 PROC … 程序 · ·

过程名 ENDP 代码段名 ENDS END 过程名或起始标号

在源程序中最少要有一个代码段,数据段根据需要可有可无,也可以增设附加段。对于堆栈段也可以根据需要可有可无,但在连接(LINK)时计算机将显示警告性的错误: Warning : N STACK segment There was 1 error detected.在程序中如果没有用到堆栈时,该错误提示不影响程序的运行,如果程序中用到堆栈时必须设置堆栈段。其中: SEGMENT、ASSUME、PROC … ENDP 为伪指令,伪指令是发给汇编程序 ASM 的,而不和微处理器打交道,在汇编时不产生目标代码,只是把源程序中各段的设置情况告诉汇编程序。)段寄存器的段地址的装入

Assume 伪指令语句只是建立了当前段与段寄存器的联系,但不能把各段的段地址装入相应的段寄存器中,段寄存器的段地址的装入是在程序中完成的。(1)DS、ES、SS 的装入

由于段寄存器不能用立即数寻址方式直接传送,所以段地址装入可通过通用寄存器传送给段寄存器。MOV AX,逻辑段名 MOV 段寄存器,AX 其中逻辑段名为程序中定义各逻辑段的名字,(不包括代码段),段寄存器是指与各逻辑段相对应的各段寄存器(DS、ES、SS)。(2)CS 的装入

代码段寄存器是装当前执行目标代码的段地址,IP 是提供下一条要执行的目标代码的偏移量,为了保证程序的正确执行,CS 和 IP 装入新值时是一起完成的。对 CS 和 IP 的装入有如下几种情况:

①根据用户程序中的伪指令 END 后的标号为 CS 和 IP 提供代码段的段地址和目标代码的偏移地址。

②在程序运行过程中,当执行某些指令和操作时,CPU 自动修改 CS 和 IP 的值,使它们指向新的代码段。)程序中的数据与变量

在汇编源程序中的数据除了立即数,由指令产生的数和通过键盘输入的数以外,还胡大量的数据是通过伪指令语句进行预置和分配的,也就是在某逻辑段中(除代码段),将所需的数据以某种形式存放起来,在程序中可任意调用。在数据定义的同时还可以定义变量,将变量与数据结合在一起。可以为某个变量分配存储空间以便在程序执行过程中存放中间结果和最终结果,使用起来极为方便。

(1)变量与数据的定义

变量与数据的定义可以通过符号定义伪指令 EQU、=和数据定义伪指令 DB 或 DW 或 DD 来实现。EQU 和=可以出现在程序的逻辑段内也可出现在逻辑段外。

(2)汇编程序中数据的提供方法 ①用数据定义伪指令提供数据

如果程序要求原始数据为一批数据时,用数据定义伪指令 DB、DW 和 DD 来提供较为方便。②用立即数的形式提供数据

当原始数据只有几个时,一般用立即数的方法来提供。当然,用立即数的方法只是将一个数据传送到通用寄存器中,它只是通过通用寄存器传送数据。③用编程的方法提供数据

假如原始数据是一组有规律的数据项,则用编程序的方法形成这一组数据,不用专门为这组数据分配存储单元,节省了存储空间。④用键盘提供数据

当原始数据为任意数据时,一般用键盘输入方法,调用 DOS 21H 中断。

(3)数据的输出方式 ①在显示器上显示一个字符

调用 02H 号功能调用号,发 21H 号中断,将要显示的字符的 ASCII 码送入 DL,就可在显示器上显示该字符。②在打印机上输出一个字符

调用 05H 号功能调用号,发 21H 号中断,将要打印字符的 ASCII 码送入 DL,就可在打印机上打印出 DL 中的字符。

4)返回 DOS 状态的方法

当执行.EXE 文件时,是在 DOS 状态下进行的,如果希望在执行完.EXE 文件后正常返回 DOS 状态,一般用如下两种方法:采用 DOS 4CH 功能调用和采用返回(RET)断点的方法。

汇编处理 — 执行宏汇编程序 MASM.EXE

用汇编语言编写的源程序必须是一个完整的源程序。宏汇编程序对汇编语言源程序的汇编过程包括语法检查和数据代码汇编两部分,生成目标程序和辅助信息文件。为了完成汇编任务,汇编程序一般采用两遍扫描的方法,第一遍扫描源程序产生符号表、处理伪指令等,第二遍扫描产生机器指令代码、确定数据等。源程序用宏汇编程序翻译(汇编)后,可以得到三个文件:一个是扩展名为.OBJ 的目标文件,在该文件中,将源程序的操作码部分变为机器码,但地址操作数是可浮动的相对地址,而不是实际地址,因此需经 LINK 连接文件进行连接才能形成可执行文件。第二个文件是列表文件,扩展名为.LST,它把源程序和目标程序列表,以供检查程序用。第三个文件是交叉索引文件,扩展名为.CRF,它是一个对源程序所用的各种符号进行前后对照的文件。其中目标文件是必须产生的,而其它两个文件在需要时给予命令就可产生,对连接和执行汇编程序无直接的关系。)汇编操作过程

在 DOS 状态下,键入 MASM ↓则调入宏汇编程序,屏幕显示与操作如下: masm ↓ Microsoft(R)Macro Assemble Version 5.00 Copyright(C)Microsoft Corp 1981-1985,1987,All right reserved.Source filename [.ASM ]: MYFILE ↓ Object filename [MYFILE.OBJ ]: MYFILE ↓ Source listing [NUL.LST ]: MYFILE ↓ Cross-reference [NUL.CRF]: MYFILE ↓ 50678 + 410090 Bytes symbol space free 0 Warning Errors 0 Severe Errors 其中划线部分为用户键入部分,MYFILE 为源程序名(MYFILE.ASM),方括号中是机器规定的默认文件名,如果用户认为方括号内的文件名就是要键入的文件名,则可只在划线部分键入回车符。如果不想要列表文件和交叉索引文件,则可在 [NUL.LST ] 和 [NUL.CRF] 后不键入文件名只键入回车符。

当回答完上述四个询问后,汇编程序就对源程序进行汇编。在汇编过程中,如果发现源程序中有语法错误,则提示出错信息,指出是什么性质的错误,错误类型,最后列出错误的总数。之后可重新进入屏幕编辑状态,调入源程序(MYFILE.ASM)进行修改,修改完毕,再进行汇编,直到汇编通过为止。

如果在汇编时不需要产生列表文件(.LST)和交叉索引文件(.CRF),调用汇编程序时可用分号结束。如果需要产生.OBJ 和.LST 文件,不需要.CRF 文件,则在分号前面加两个逗号即可。如果 4 个文件都需要,用简便的操作方法是在分号前用了 3 个逗号。)列表文件(.LST)

列表文件(.LST)是通过汇编程序(MASM)产生的,可以在 DOS 状态下用 TYPE 命令显示或打印该文件,以便分析调试源程序。如显示 D 盘上已存在的列表文件 MYFILE.LST 操作方法如下: D> TYPE MYFILE.LST ;↓ 列表程序由三部分组成:(1)源程序和目标程序清单

列表程序同时列出源程序和对应的机器语言清单。列表程序的第一列给出每条指令所在行号;第二列给出从段的首地址开始的每条指令存放的偏移地址;接着是数字列,给出对应每条语句的机器码和对应于存放在栈段和数据段的值,在机器码加上“ R ”的指令表示:这条指令在连接时可能产生与列出来的偏移地址不同的地址,因为这些偏移地址可能与其它模块有关;最右边就是用汇编语言编写的源程序。(2)段信息汇总表

在段信息汇总表中列出该程序用了哪几个段,如:代码段 CODE、数据段 DATA 和堆栈段 STACK ;每个段所占存储空间的长度(字节数);每个段的定位类型,包括 PAGE(页)、PARA(节)、WORD(字)和 BYTE(字节),它们表示此段的起始边界要求,即起始边界地址应分别可以被 256、16、2 和 1 除尽。该列表清单 中是以 PARA 为 CODE 段、DATA 段和 STACK 段的起始边界地址。最后一列为段的组合类型;段的组合类型是告诉连接程序,本段与其它段的关系,组合类型有 NONE、PUBLIC、COMMOM、AT 表达式、STACK 和 MEMORY。NONE :表示本段与其它段不发生逻辑关系,即每段都有自己的基本地址。是隐含组合类型。

STACK :表明连接程序首先要把本段与同名同类别的其它段相邻地连接在一起,然后为所有定义为栈段的连接在一起的段,定义一个共同的段基地址,即连接成一个物理段。

在列表程序的源程序中只有一个栈段,在栈段定义中给出了组合类型为 STACK,因此在段信息汇总表中列出了该项,在本程序中它没有任何意义,因为没有其它栈段与它连接,只是为了说明这个问题而设置的。(3)符号汇总表

在列表程序中最后部分列出了符号汇总,是指在源程序中用户定义的符号名、类型、值和所在段。

如果在源程序中存在某些语法错误时,列表文件可提示某条语句有哪些错误,出错提示显示在出错指令行的下面,因此用户可借助列表文件很快地找到错误行,以便调试。另外由于列表文件给出了各条指令的偏移地址,对和程序时设置断点很方便。)交叉索引文件(.CRF)

汇编后产生的交叉索引文件,扩展名为.CRF, 它列出了源程序中定义的符号(包括:标号、变量等)和程序中引用这些符号的情况。如果要查看这个符号表,必须使用 CREF.EXE 的文件,它根据.CRF 文件建立一个扩展名为.REF 的文件,而后再用 DOS 的 TYPE 命令显示,就可以看到这个符号使用情况表。具体操作方法如下: D> CREF ↓

cref filename [.CRF] : MYFILE ↓ list filename [MYFILE.REF] : ↓ D> TYPE MYFILE.REF ↓

目标代码链接程序----LINK.EXE

用汇编语言编写的源程序经过汇编程序(MASM)汇编后产生了目标程序(.OBJ),该文件是将源程序操作码部分变成了机器码,但地址是可浮动的相对地址(逻辑地址),因此必须经过连接程序 LINK 连接后才能运行。连接程序 LINK 是把一个或多个独立的目标程序模块装配成一个可重定位的可执行文件,扩展名为.EXE 文件。此外还可以产生一个内存映象文件,扩展名为.MAP。1)连接程序执行过程

在 DOS 状态下,键入 LINK ↓(或 LINK MYFILE ↓)则系统调入 LINK 程序,屏幕显示操作如下: D> LINK ↓

IBM Personal Computer Linker Version 2.00(C)Copyright IBM Corp 1981,1982,1983 Object Modules [.OBJ] : MYFILE ↓ Run File [MYFILE.EXE] : MYFILE ↓ List File [NUL.MAP] : MYFILE ↓ Libraries [.LIB] : ↓

其中划线部分为用户键入部分,MYFILE 为源程序名,方括号内为机器默认文件名,当用户认为方括号中的文件名就是要键入的文件名时,可在冒号后面只键入回车。

其中 MAP 文件是否需要建立,由用户决定,需要则键入文件名,不需要则直接送入一个回车键。

最后一个询问是问是否在连接时用到库文件,对于连接汇编语言源程序的目标文件,通常是不需要的,因此直接键入回车键。

与汇编程序一样,可以在连接时用分号结束后续询问。例如:

D> LINK MYFILE ;↓

IBM Personal Computer Linker Version 2.00(C)Copyright IBM Corp 1981,1982,1983 连接后只产生 MYFILE.EXE 文件。如果除 MYFILE.EXE 文件外还要产生 MYFILE.MAP 文件,则在分号前加两个逗号。D> LINK MYFILE,;↓ IBM Personal Computer Linker Version 2.00(C)Copyright IBM Corp 1981,1982,1983 2)内存映象文件(.MAP)

由连接程序 LINK 产生的扩展名为.MAP 文件,它实际上是连接程序的列表文件,它给出了每个段的地址分配情况及长度。

在 DOS 状态下,用 TYPE 命令显示打印出来。例如: D> TYPE MYFILE.MAP ↓ Start Stop Length Name Class 00000H 0000FH 0010H DATA 00010H 0004FH 0040H STACK 00050H 0005FH 0010H CODE Origin Group Program entry point at 0005:0000 从中可以看到,源程序 MYFILE 中定义了三个段:数据段(DATA)起始地址为 00000H,终止地址为 0000FH,长度为 0010H 个字节;堆栈段(STACK)起始地址为 00010H,终止地址为 0004FH,长度为 0040H 个字节;代码段(CODE)起始地址为 00050H,终止地址为 0005FH,长度为 0010H 个字节。

应用程序执行

当用连接程序 LINK 将目标程序(.OBJ)连接定位后,可产生可执行的应用程序文件(.EXE),可以在 DOS 状态下执行该程序。执行操作如下: D> MYFILE ↓ 或 D> MYFILE.EXE ↓

在源程序 MYFILE 中如果有显示结果的指令,则在执行程序后可以看到执行结果;如需要动态调试应用程序 MYFILE.EXE,则可以借助动态调试程序 DEBUG.COM 来进行调试、运行,DEBUG 是一种支持命令行方式的汇编语言编程调试工具。

动态调试程序 DEBUG.COM 在编写和运行汇编程序的过程中,会遇到一些错误和问题,需要对程序进行分析和调试,调试程序 DEBUG 就是专为汇编语言设计的一种调试工具。它在调试汇编语言程序时有很强的功能,能使程序设计者接触到机器内部,能观察和修改寄存器和存储单元内容,并能监视目标程序的执行情况,使用户真正接触到 CPU 内部,与计算机产生最紧密的工作联系。

动态和程序 DEBUG 的主要特点 DEBUG 的执行 DEBUG 命令格式 主要 DEBUG 命令

动态和程序 DEBUG 的主要特点)能够在最小环境下运行汇编程序

在 DOS 状态下运行汇编程序,必须将程序经过 MASM 汇编程序,而后还要经过 LINK 连接程序产生可执行程序,才能最终运行,比较麻烦。在 DEBUG 状态下,为用户提供了调试、控制测试的环境,可以在此环境下进行编程、调试、监督、执行用户编写的汇编程序。因此调试周期短,为用户提供了极大的方便。2)提供极简单的修改手段

DEBUG 提供了修改命令,可以修改内存单元内容,修改寄存器的内容,为调试程序、修改程序带来了方便。3)提供用户与计算机内部联系的窗口

DEBUG 具有显示命令,它既可以使用户看到某内存单元或某一块单元内容,也可以看到 CPU 内部各寄存器的内容。用单步执行命令实现跟踪执行,每执行一步都使用户看到各寄存器的内容的变化,以便分析和调整程序。4)可装入、修改或显示任何文件

当然在 DEBUG 状态下运行汇编程序也具有一定局限性。在 DEBUG 状态下运行的程序不能使用宏汇编程序中的宏指令,大部分伪指令也不能使用,因此只能把程序分段调试。此外,不能调试太长的程序,只能分块进行中程序设计。在 DEBUG 状态下调试好的程序不能形成可执行文件(.EXE),因此调试好的程序只能记下,到编辑环境下重新键入调试好的程序,通过汇编程序(如 MASM),再通过连接程序(LINK)形成可执行文件(.EXE)。

DEBUG 的执行

在操作系统(DOS 或 WIndows)命令行方式下,直接调入 DEBUG 程序,键入命令的格式如下: D>DEBUG [d:][Path][filename[.ext]][Parm1][Parm2] 其中 [] 的内容为可选项,可以有也可以缺省。

[d:] 为驱动器号,指要调入 DEBUG 状态的可执行文件在哪个驱动器中,如 A:、B:、C: 等。[Path] 为路径,指要调入 DEBUG 状态的可执行文件是在哪个目录下或子目录下。

[filename[.ext]],指要调入 DEBUG 状态下的可执行文件的文件名,该文件可以是通过编辑、汇编、连接后产生的可执行文件,也可以是在 DEBUG 状态下汇编的程序 段,通过写盘命令 W 写入磁盘的文件。[Parm1][Parm2] 为任选参数,是给定文件的说明参数。

在启动 DEBUG 时,如果输入 filename(文件名),则 DEBUG 程序把指定文件装入内存,用户可以通过 DEBUG 的命令对指定文件进行修改、显示或执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令或装入命令把需要的文件装入内存,然后再通过 DEBUG 命令进行修改、显示或执行。当启动 DEBUG 程序后,屏幕上出现“—”,说明系统已进入 DEBUG 状态。DEBUG 命令格式(1)DEBUG 命令都是一个英文字母,后面跟着一个或多个有关参数。多个操作参数之间用“ , ”或空格隔开。(2)DEBUG 命令必须接着按 ENTER 键,命令才有效。

(3)参数中不论是地址还是数据,均用十六进制数表示,但十六进制数据后面不要用“ H ”。(4)可以用 Ctrl 和 Break 键来停止一个命令的执行,返回到 DEBUG 的提示符“—”下。(5)用 Ctrl - Num Lock 键中止正在上卷的输出行,再通过按任意键继续输出信息。主要 DEBUG 命令

(1)汇编命令 A

格式: a.A [ 段寄存器名 ]:[ 偏移地址 ] b.A [ 段地址 ]:[ 偏移地址 ] c.A [ 偏移地址 ] d.A 功能:用该命令可以将汇编语言程序直接汇编进入内存。

当键入 A 命令后,显示段地址和偏移地址等待用户键入汇编指令,每键入一条汇编指令回车后,自动显示下一条指令的段地址和偏移地址,再键入下一条汇编指令,直到汇编语言程序全部键入,又显示下一地址时可直接键入回车返回到提示符“-”为止。

其中 a 的段地址在段地址寄存器中,因此在使用该命令时必须将段地址寄存器送入段地址,c 的地址在 CS 中,d 的段地址在 CS 中,偏移地址为 100H。

(2)显示内存命令 D 格式: a.D [ 地址 ] b.D [ 地址范围 ] c.D 功能:显示指定内存范围的内容。

显示的内容为两种形式:一种为十六进制内容,一种为与十六进制相对应的 ASCII 码字符,对不可见字符以“·”代替。

对于 a、c 每次显示 128 个字节内容,b 显示的字节数由地址范围来决定。

若命令中有地址,则显示的内容从指定地址开始,若中中无地址(如 c)则从上一个 D 命令所显示的最后一个单元的下一个单元开始。若以前没有使用过 D 命令,则以 DEBUG 初始化的段寄存器的内容为起始段地址,起始偏移地址为 100H,即 CS:100。

对于 a 中的地址为偏移地址,段地址为 CS 的内容,对 b 中的地址范围,可以指定段地址和起始偏移地址和终止偏移地址。

(3)修改存储单元内容命令 E 格式: a · E [ 地址 ] [ 内容表 ] b · E [ 地址 ] 功能: a ·用命令所给定的内容表去代替指定地址范围的内存单元内容。b ·一个单元一个单元地连续修改单元内容。

其中:内容表为一个十六进制数,也可以是用单引号括起的一串字符。

(4)填充内存命令 F

格式: F [ 范围 ][ 单元内容表 ] 功能:将单元内容表中的内容重复装入内存的指定范围内。

(5)内存搬家命令 M

格式: M [ 源地址范围 ][ 目标起始地址 ] 其中源地址范围和目的起始地址为偏移地址,段地址为 DS 的内容。功能:把源地址范围的内容搬至以目标起始地址开始的存储单元中。

(6)比较命令 C

格式: C [ 源地址范围 ],[ 目标地址 ] 其中源地址范围是由起始地址和终止地址指出的一片连续的存储单元,目标地址为与源地址所指单元对比的目标地址起始地址。功能:从源地址范围是由起始的地址单元开始逐个与目标起始地址往后的单元顺序比较每个单元内容,比较到源终止地址为止。比较结果如果一致则不显示任何信息,如果不一致,则以 [ 源地址 ][ 源内容 ][ 目的内容 ][ 目的地址 ] 的形式显示失败单元地址及内容。

(7)搜索指定内容命令 S 格式: S [ 地址范围 ][ 表 ] 功能:在指定地址范围内搜索表中内容,搜索到就显示表中元素所在地址。

(8)检查和修改寄存器内容命令 R 格式: a · R b · R [ 寄存器名 ] 功能: a ·显示 CPU 内部所有寄存器的内容和全部标志位的状态。b ·显示和修改一个指定寄定器的内容和标志位的状态。

其中对状态标志寄存器 FLAG 以位的形式显示,显示时,8 个状态标志的显示次序和符号如表 B - 1 所示。表 B - 1 状态标志显示形式

标 志 位 溢出标志 OF 方向标志 DF 中断标志 IF 符号标志 SF 零标志 ZF 辅助进位 AF 奇偶标志 PF 进位标志 CF

(9)跟踪与显示命令 T

格式: a · T[ =地址 ] 或 T [ 地址 ] b · T[ =地址 ][ 条数 ] 或 T [ 地址 ][ 条数 ] 功能: a ·执行一条指定地址处的指令,停下来,显示 CPU 所有寄存器内容和全部标志位的状态,以及下一条指令的地址和内容。

b ·为多条跟踪命令,从指定地址开始;若命令中用 [ 地址 ] 给定了起始地址,则从起始地址开始,若未给定,则从当前地址(CS:IP)开始,执行命令中的 [ 条数 ] 决定一共跟踪几条指令后返回 DEBUG 状态。

(10)反汇编命令 U 格式: a · U [ 地址 ] b · U [ 地址范围 ] 功能:将指定范围内的代码以汇编 语言形式显示,同时显示该代码位于内存的地址和机器。

若在命令中没有指定地址则以上一个 U 命令的最后一条指令地址的下一个单元作为起始地址;若没有输入过 U 命令,则以 DEBUG 初始化段寄存器的值作为段地址,以 0100H 作为偏移地址。

(11)命名命令 N 格式: N 文件名

功能:在调用 DEBUG 时,没有文件名,则需要用 N 命令将要调用的文件名格式化到 CS:5CH 的文件控制块中,才能用 L 命令把它调入内存进行调试(其它形式参考 DOS 手册)。

(12)读盘命令 L

格式: a · L [ 地址 ][ 驱动器号 ][ 起始扇区号 ][ 所读扇区个数 ] b · L [ 地址 ] c · L 功能: a ·把指定驱动器和指定扇区范围的内容读到内存的指定区域中。其中地址是读入内存的起始地址,当输入时没有给定地址,则隐含地址为 CS:100H。起始扇区号指逻辑扇区号的起始位置。所读扇区个数是指从起始扇区号开始读到内存几个扇区的内容。驱动器号为 0 或 1,0 表示 A 盘,1 表示 B 盘。

b ·读入已在 CS:5CH 中格式化的文件控制块所指定的文件。在使用该命令前用 N 命令命名即可将要读入的文件名格式化到 CS:5CH 的文件控制块中,其中地址为内存地址。

状 态 有 / 无 增 / 减 开 / 关 负 / 正 零 / 非 有 / 无 偶 / 奇 有 / 无

显示形式(置位 / 复位)

OV/NV DN/UP EI/DI NG/PL ZR/NZ AC/NA PE/PO CY/NC c ·同 b ·地址隐含在 CS : 100H 中。

当读入的文件有扩展名.COM 或.EXE,则始终装入 CS:100H 中,命令中指定了地址也没用。其中 BX 和 CX 中存放所读文件的字节数。

(13)写盘命令 W

格式: a · W[ 地址 ][ 驱动器号 ][ 起始扇区号 ][ 所写扇区个数 ] b · W[ 地址 ] c · W 功能: a · 把在 DEBUGU 状态下调试的程序或数据写入指定的驱动器中 , 起始扇区号 , 所写扇区个数为要占盘中几个扇区。

写盘指定扇区的操作应十分小心,如有差错将会破坏盘上的原有内容。如果在命令行中的地址只包含偏移地址,W 命令认为段地址在 CS 中。

b ·当键入不带参数的写盘命令时,(或只键入地址参数的写盘命令),写盘命令把文件写到软盘上。该文件在用 W 命令之前用命名命令 N 将文件格式化在 CS:5CH 的文件控制块中。c ·只有 W 命令以前而没有任何参数时,与 N 配合使用进行写盘操作。在用 W 命令以前在 BX 和 CX 中应写入文件的字节数。

(15)输出命令 O

格式: O[ 端口地址 ] [ 字节值 ] 功能:向指定端口地址输出一个字节。

(16)运行命令 G

格式: G [ =地址 ][ 地址 [ 地址… ]] 功能:执行用户正在调试的程序。

其中地址为执行的起始地址,以 CS 中内容作为段地址,以等号后面的地址为偏移地址。再后面的地址为断点地址。在命令行中只有起始地址,没有断点地址,则程序在执行时不中断。DEBUG 规定最多设置 10 个断点地址。设置多个断点用于调试较大的程序,即程序中有多个模块、多个通路时用,比较方便,在执行时不论走哪条通路,程序都可以在断点处停下来,以便调整程序。

断点地址为程序中断处的偏移地址,段地址在 CS 中。

当执行在 DEBUG 状态下汇编的小段程序时,只用 G 命令即可。

(17)十六进制运算命令 H 格式: H 数据 1 数据 2 其中数据 1 和数据 2 为十六进制数据。

功能:将两个十六进制数进行相加、减,结果显示在屏幕上。(18)结束 DEBUG 返回到 DOS 命令 Q 格式: Q 功能:程序调试完退出 DEBUG 状态,返回到 DOS 状态下。

Q 命令不能把内存的文件存盘,要想存盘必须在退出 DEBUG 之前用 W 命令写盘

读书的好处

1、行万里路,读万卷书。

2、书山有路勤为径,学海无涯苦作舟。

3、读书破万卷,下笔如有神。

4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文

5、少壮不努力,老大徒悲伤。

6、黑发不知勤学早,白首方悔读书迟。——颜真卿

7、宝剑锋从磨砺出,梅花香自苦寒来。

8、读书要三到:心到、眼到、口到

9、玉不琢、不成器,人不学、不知义。

10、一日无书,百事荒废。——陈寿

11、书是人类进步的阶梯。

12、一日不读口生,一日不写手生。

13、我扑在书上,就像饥饿的人扑在面包上。——高尔基

14、书到用时方恨少、事非经过不知难。——陆游

15、读一本好书,就如同和一个高尚的人在交谈——歌德

16、读一切好书,就是和许多高尚的人谈话。——笛卡儿

17、学习永远不晚。——高尔基

18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向

19、学而不思则惘,思而不学则殆。——孔子

20、读书给人以快乐、给人以光彩、给人以才干。——培根

第四篇:石油论文编写格式

科技论文的编写格式1.章、条、条、条的编号

按国家标准《标准化工作导则第1单元:标准的起草与表述规则第1部分:标准编写的基本规定》的规定,科技论文的章、条、条、条的划分、编号和排列均应采用阿拉伯数字分级编写,即一级标题的编号为1,2,…;二级标题的号为1.1,1.2,…,2.1,2.2,…;三级标题的编号为1.1.1,1.1.2,…,如此等等,详细参见GB/T1.1-93和GB7713-87。

国标规定的这一章条编号方式对著者、编者和读者都具有显著的优越性。

2.题名(篇名)

题名是科技论文的必要组成部分。它要求用最简洁、恰当的词组反映文章的特定内容,把论文的主题明白无误地告诉读者,并且使之具有画龙点睛,启迪读者兴趣的功能。一般情况下,题名中应包括文章的主要关键词。总之,题名的用词十分重要,它直接关系到读者对文章的取舍态度,务必字字斟酌。题名像一条标签,切忌用冗长的主、谓、宾语结构的完整语句逐点描述论文的内容,以保证达到“简洁”的要求;而“恰当”的要求应反映在用词的中肯、醒目、好读好记上。当然,也要避免过分笼统或哗众取宠的所谓简洁,缺乏可检索性,以至于名实不符或无法反映出每篇文章应有的主题特色。

题名应简短,不应很长,国际上不少著名期刊都对题名的用字有所限制。对于我国的科技期刊,论文题名用字不宜超过20个汉字,外文题名不超过10个实词。使用简短题名而语意未尽时,或系列工作分篇报告时,可借助于副标题名以补充论文的下层次内容。

题名应尽量避免使用化学结构式、数学公式、不太为同行所熟悉的符号、简称、缩写以及商品名称等。

3.著者

著者署名是科技论文的必要组成部分。著者系指在论文主题内容的构思、具体研究工作的执行及撰稿执笔等方面的全部或局部上做出主要贡献的人员,能够对论文的主要内容负责答辩的人员,是论文的法定主权人和责任者。署名人数不宜太多,对论文涉及的部分内容作过咨询、给过某种帮助或参与常规劳动的人员不宜按著者身份署名,但是可以注明他们曾参与了哪一部分具体工作,或通过文末致谢的方式对他们的贡献和劳动表示谢意。

合写论文的诸著者应按论文工作贡献的多少顺序排列。著者的姓名应给出全名。科学技术文章一般均用著者的真实姓名,不用变化不定的笔名。同时还应给出著者完成研究工作的单位或著者所在的工作单位或通信地址,以便读者在需要时可与著者联系。

[示例]:

熊易群1,贾改莲2,钟小锋1,刘建君1

(1陕西师范大学教育系,陕西西安710062;2陕西省教育学院教育系,陕西西安710061)

4.摘要

摘要是现代科技论文的必要附加部分,只有极短的文章才能省略。它是解决读者既要尽可能掌握浩瀚的信息海洋,又要面对自身精力十分有限这一对矛盾的有效手段。

根据GB6447-86的定义,摘要是以提供文献内容梗概为目的,不加评论和补充解释,简明确切地记述文献重要内容的短文。

摘要有两种基本写法:报道性摘要--指明一次文献的主题范围及内容梗概的简明摘要(也称简介);指示性摘要--指示一次文献的陈述主题及取得的成果性质和水平的简明摘要。介乎其间的是报道/指示性摘要--以报道性摘要形式表述一次文献中信息价值较高的部分,而以指示性摘要形式表述其余部分的摘要。一般的科技论文都应尽量写成报道性摘要,而对综述性、资料性或评论性的文章可写成指示性或报道/指示性摘要。

摘要应简明,它的详简程度取决于文献的内容。通常中文摘要以不超过400字为宜,纯指示性摘要可以简短一些,应控制在200字上下(GB6447-86规定:报道性摘要和报道/指示性摘要一般以400字为宜;指示性摘要一般以200字左右为宜。GB7713-87规定:中文摘要一般不宜超过200~300字;外文摘要不宜超过250个实词。如遇特殊需要字数可以略多)。对于使用英、俄、德、日、法以外文种书写的一次文献,它们的摘要可以适当详尽一些。学位论文等文献具有某种特殊性,为了评审,可写成变异式的摘要,不受字数的限制。摘要的编写应该客观、真实,切忌掺杂进编写者的主观见解、解释和评论。如果发现一次文献有原则性错误,可加注“摘者注”。

摘要应具有独立性和自明性,并拥有与一次文献同等量的主要信息,即不阅读文献的全文,就能获得必要的信息。因此摘要是一种可以被引用的完整短文。

[编写摘要的注意事项]:

① 排除在本学科领域方面已经成为常识的内容;

② 不得简单地重复文章篇名中已经表述过的信息;

③要求结构严谨,语义确切,表述简明,一气呵成,一般不分或力求少分段落;忌发空洞的评语,不作模棱两可的结论。没有得出结论的文章,可在摘要中作扼要的讨论。

④ 要用第三人称,不要使用“作者”、“我们”等作为摘要陈述的主语;

⑤要采用规范化的名词术语。尚未规范化的,以采用一次文献所采用的为原则。如新术语尚无合适的中文术语译名,可使用原文或译名后加括号注明原文;

⑥不要使用图、表或化学结构式,以及相邻专业的读者尚难于清楚理解的缩略语、简称、代号。如果确有必要,在摘要首次出现时必须加以说明;

⑦ 不得使用一次文献中列出的章节号、图号、表号、公式号以及参考文献号等;

⑧ 必要提及的商品名应加注学名。

当然,应该使用法定计量单位以及正确地书写规范字和标点符号。

摘要的书写要求详细见国标GB6447-86。

5.关键词

为了便于读者从浩如烟海的书刊中寻找文献,特别是适应计算机自动检索的需要,GB3179/T-92规定,现代科技期刊都应在学术论文的摘要后面给出3~8个关键词。关键词的标引应按GB3860-83《文献主题标引规则》的规定,在审读文献题名、前言、结论、图表,特别是在审读文献的基础上,逐篇对文献进行主题分析,然后选定能反映文献特征内容,通用性比较强的关键词。首先要选取列入《汉语主题词表》、《MeSH》等词表中的规范性词(称叙词或主题词)。对于那些反映新技术、新学科而尚未被主题词表录入的新产生的名词术语,亦可用非规范的自由词标出,以供词表编纂单位在修订词表时参照选用。要强调的一点是:一定不要为了强调反映文献主题的全面性,把关键词写成是一句句内容“全面”的短语。

6.引言

引言(前言、序言、概述)经常作为论文的开端,主要回答“为什么研究(why)”这个问题。它简明介绍论文的背景、相关领域的前人研究历史与现状(有时亦称这部分为文献综述),以及著者的意图与分析依据,包括论文的追求目标、研究范围和理论、技术方案的选取等。引言应言简意赅,不要等同于摘要,或成为摘要的注释。引言中不应详述同行熟知的,包括教科书上已有陈述的基本理论、实验方法和基本方程的推导;除非是学位论文,为了反映著者的学业等等,允许有较详尽的文献综述段落。如果在正文中采用比较专业化的术语或缩写词时,最好先在引言中定义说明。

7.正文

正文是科技论文的核心组成部分,主要回答“怎么研究(how)”这个问题。正文应充分阐明论文的观点、原理、方法及具体达到预期目标的整个过程,并且突出一个“新”字,以反映论文具有的首创性。根据需要,论文可以分层深入,逐层剖析,按层设分层标题。

正文通常占有论文篇幅的大部分。它的具体陈述方式往往因不同学科、不同文章类型而有很大差别,不能牵强地做出统一的规定。一般应包括材料、方法、结果、讨论和结论等几个部分。

试验与观察、数据处理与分析、实验研究结果的得出是正文的最重要成分,应该给予极大的重视。要尊重事实,在资料的取舍上不应该随意掺入主观成分,或妄加猜测,不应该忽视偶发性现象和数据。

写科技论文不要求有华丽的词藻,但要求思路清晰,合乎逻辑,用语简洁准确、明快流畅;内容务求客观、科学、完备,要尽量让事实和数据说话;凡是用简要的文字能够讲解的内容,应用文字陈述。用文字不容易说明白或说起来比较繁琐的,应由表或图(必要时用彩图)来陈述。表或图要具有自明性,即其本身给出的信息就能够说明欲表达的问题。数据的引用要严谨确切,防止错引或重引,避免用图形和表格重复地反映同一组数据。资料的引用要标明出处。

物理量与单位符号应采用《中华人民共和国法定计量单位》的规定,选用规范的单位和书写符号;不得已选用非规范的单位或符号时应考虑行业的习惯,或使用法定的计量单位和符号加以注解和换算。

教科书式的撰写方法是撰写科技论文的第一大忌。对已有的知识避免重新描述和论证,尽量采用标注参考文献的方法;对用到的某些数学辅佐手段,应防止过分注意细节的数学推演,需要时可采用附录的形式供读者选阅。

8.结论

结论(或讨论)是整篇文章的最后总结。尽管多数科技论文的著者都采用结论的方式作为结束,并通过它传达自己欲向读者表述的主要意向,但它不是论文的必要组成部分。

结论不应是正文中各段小结的简单重复,主要回答“研究出什么(what)”。它应该以正文中的试验或考察中得到的现象、数据和阐述分析作为依据,由此完整、准确、简洁地指出:

① 由对研究对象进行考察或实验得到的结果所揭示的原理及其普遍性;

② 研究中有无发现例外或本论文尚难以解释和解决的问题;

③ 与先前已经发表过的(包括他人或著者自己)研究工作的异同;

④ 本论文在理论上与实用上的意义与价值;

⑤ 对进一步深入研究本课题的建议。

9.致谢

致谢一般单独成段,放在文章的最后面,但它不是论文的必要组成部分。它是对曾经给予论文的选题、构思或撰写以指导或建议,对考察或实验过程中做出某种贡献的人员,或给予过技术、信息、物质或经费帮助的单位、团体或个人致以谢意。一般对例外的劳动可不必专门致谢。

10.参考文献

文后参考文献是现代科技论文的重要组成部分,但如果撰写论文时未参考文献也可以不写。它是反映文稿的科学依据和著者尊重他人研究成果而向读者提供文中引用有关资料的出处,或为了节约篇幅和叙述方便,提供在论文中提及而没有展开的有关内容的详尽文本。任何不重视参考文献,甚至于使用“文后参考文献从略”的编辑处理方法都是错误的。

被列入的参考文献应该只限于那些著者亲自阅读过和论文中引用过,而且正式发表的出版物,或其他有关档案资料,包括专利等文献。私人通信、内部讲义及未发表的著作,一般不宜作为参考文献著录,但可用脚注或文内注的方式,以说明引用依据。国内外对文后参考文献的著录方法历来很多,但自从ISO制订国际标准以来已有渐趋一致的动向,目前,我国文献工作标准化技术委员会已经根据国际标准化工作发展趋势,制订出自己的国家标准--GB7714-87《文后参考文献著录规则》,明确规定我国的科技期刊采用国际上通行的“顺序编码制”和“著者-出版年制”。前者根据正文中引用参考文献的先后,按著者、题名、出版事项的顺序逐项著录;后者首先根据文种(按中文、日文、英文、俄文、其他文种的顺序)集中,然后按参考文献著的姓氏笔画或姓氏首字母的顺序排列,同一著者有多篇文献被参考引用时,再按文献出版年份的先后依次给出。

文后参考文献的著录形式还是比较复杂的,具体执行时请随时查阅GB7714-87的规定。

参考文献著录的条目以小于正文的字号编排在文末。其格式为:

专著、论文集、学位论文、报告--[序号]主要责任者.文献题名[文献类型标识].出版地,出版者,出版年,起止页码(任选)。

[示例]:

[1]周振甫.周易译注[M].北京:中华书局。1991。

[2]陈崧.五四前后东方西文化问题论战文选[C].北京:中国社会科学出版社,1985。

[3]陈桐生.中国史官文化与《史记》[D].西安:陕西师范大学文学研究所,1992。

[4]白永秀,刘敢,任保平.西安金融、人才、技术三大要素市场培育与发展研究[R].西安:陕西师范大学西北经济发展研究中心,1998。

期刊文章--[序号]主要责任者.文献题名[J].刊名,年,卷(期):起止页码。

[示例]:

[5]何龄修.读顾城《南明史》[J].中国史研究,1998,(3):167-173。

论文集中的析出文献--[序号]析出文献主要责任者.析出文献题名[A]。

原文献主要责任者(任选).原文献题名[C].出版地:出版者,出版年.析出文献起止页码。

[示例]:

[6]瞿秋白.现代文明的问题与社会主义[A].罗荣渠.从西化到现代化[c].北京:北京大学出版社,1990.121-133。

报纸文章--[序号]主要责任者.文献题名[N].报纸名,出版日期(版次)。

[示例]:

[7]谢希德.创造学习的新思路[N].人民日报,1998-12-25(10)。

国际标准、国家标准--[序号]标准编号,标准名称[S]。

[示例]:

[8]GB/T 16159-1996,汉语拼音正词法基本规则。

电子文献--[序号]主要责任者.电子文献题名[电子文献及载体类型标识]-电子文献的出处或可获得地址,发表或更新日期/引用日期(任选)。[示例]:

[9]王明亮.关于中国学术期刊标准化数据库系统工程的进展[EB/OL].http://,1998-08-16/1998-10-04。

[10]万锦坤.中国大学学报论文文摘(1983-1993).英文版[DB/CD].北京:中国大百科全书出版社,1996.各种未定类型的文献--[序号]主要责任者.文献题名[z].出版地:出版者,出版年。

[示例]:

[11]张永禄.唐代长安词典[z].西安:陕西人民出版社,1980。

11.附录

附录是论文的附件,不是必要组成部分。它在不增加文献正文部分的篇幅和不影响正文主体内容叙述连贯性的前提下,向读者提供论文中部分内容的详尽推导、演算、证明、仪器、装备或解释、说明,以及提供有关数据、曲线、照片或其他辅助资料如计算机的框图和程序软件等。

附录与正文一样,编入连续页码。

第五篇:51单片机课程设计 俄罗斯方块

单片机课程设计

俄罗斯方块

学院:工程技术学院

专业:08级电子科学与技术

小组成员:

何冠羲,马志祥,李洋,张世刚,叶彪,郑先安,洪之

目录

摘要

引言

1.程序整体思路

2.8X8LED模块显示原理 3.硬件电路仿真图 4.图形显示 5.消层算法 6.旋转算法 7.实物焊接

8.心得体会

附录 程序代码

摘 要

记得在很小的时候,有一种掌上游戏机,里面有一款游戏叫做俄罗斯方块,那时的我们只是简单的按照游戏规则进行“堆积木”,而其中的原理却很少有人去思考,毕竟当时的我们都还很年幼。

基于单片机课程设计的机会,我们这个小组将使用51单片机和8x8led的组合,来实现比较简单的俄罗斯方块设计。

此次设计初期是在keil和proteus联合仿真中进行,编程语言为51汇编,后期是进行实物焊接。

论文描述了俄罗斯方块的主要功能函数的实现,算法分析和实物焊接过程中遇到的问题。

关键词:俄罗斯方块;算法; 8X8led;

引 言

游戏是人们活动中一项非常重要的内容,有人认为如果哪一天人类对所有的游戏都失去兴趣,恐怕世界的末日就要到了。电脑对游戏的贡献有目共睹,现在摸过电脑的人很少有没玩过电脑游戏的,喜欢游戏的人也很少有不玩电脑的。

俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在“联众俄罗斯方块”中,更有一些联众网络游戏所独有的魅力――有单机作战与两人在线对战两种模式,用户可任选一种进行游戏。网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。

俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。本文利用单片机进行俄罗斯方块设计,采用51汇编语言进行编程,基于汇编语言的原因是在编写程序的过程中,对于程序的执行会有一个比较直观的表现。

1.程序整体思路

单片机上的程序设计一般是一个大循环结构,对于俄罗斯方块的程序设计,首先产生一个伪随机数,其范围是0-6,然后程序根据此数值所对应的图形模块装入ram的固定区域内,紧接着将此图像写入led所对应的显示缓冲区中,显示程序将缓冲区内的内容显示在led上,如果没有控制键按下,图形将自动向下移动。如果有键按下,程序将根据按下的键来改变图形存储区的值,同时程序将判断图形是否已到达边界,当图形最上层到达显示区顶部,则游戏结束,此时将清楚显示缓冲的内容,游戏重新开始。2.8x8led显示原理

8x8led显示屏的原理图如下

由于人眼的视觉暂留现象,通过逐行扫描显示的方式来显示要显示的内容,当每一行扫描的时间很小时人眼观察的将是一幅完整的图像。

3. 硬件电路仿真图

.4.图形显示

8x8led一共有64个led,可以从下至上一次对其编号,对于显示类的基本操作是任意点亮一个点,熄灭一个点,任意点亮n(0

我们将ram中从21h单元到28h单元作为led的显示缓冲区,这里面的每一位对应led的一个点,led将实时显示缓冲区的内容,也就是当此缓冲区内容一改变,led上看到的也会做出相应的改变。同时在俄罗斯方块中那些方块被存放在一个类似于一维的数组之中,每一个方块对应四个小方块,根据伪随机数将这四个小方块对应的值装入ram固定的区域内。如果要显示方块只需将这些方块所对应的点写入缓冲区。5.消层算法

设置循环变量数R2=8,即总共至少要扫描8次,每一次循环过程中检测此行是否已满,也就是检测这一行所对应的存储单元是否全为一,如果全为一则将消去此行,即将此行对应的ram清零。同时将此行上面ram的内容按每列依次下移,下移完之后重新将R2=0,又从第一行开始检测。此行不全为零时只需将R2=R2+1。直到R2=9消层过程结束。6.旋转算法

首先要确定一个旋转中心,假如旋转中心的编号是34,将34除以8,商是4存入R1余数是2存入R2,及时用商和余数建立坐标系。此时若以此为旋转中心的图形需要旋转,则将每一个小方块对应编号除以8,商减去R1,余数减去R2,而每一个方块一次将旋转90度,所以有公式x1,y1,x2,y2

x2=-y1,y2= x1 其中x1,y1为旋转之前的坐标,x2,y2为旋转之后的坐标。旋转完之后将x2加上R1将y2加上R2,然后将x2乘以8再加上y2。执行四次此过程旋转结束。7.实物焊接

器件:stc51单片机一块,8x8led显示模块一块,电阻10k10个,开关5个,与门,12m晶振一个,电容3个。

首先按照目的进行进行元器件布局,然后按照电路图里的导线的连接次序将元器件焊在电路板上,焊好之后进行调试。8.心得体会

写程序的过程中,首先应该把程序思路理清,然后再写代码,否则写到一半感觉行不通时是很令人心烦的。还有就是焊接是一个技术活,因为在电子工艺实习之后大家便没有碰过电烙铁,所以焊的过程还是很辛苦的。

附录:程序代码

ORG

0000H AJMP

START ORG

0003H AJMP

INTERRUPT AA

EQU

10000000B BB

EQU

11111111B HANG

EQU

32H LIE

EQU

33H COUNT

EQU

34H REMOVEROW

EQU

35H STEPS

EQU

36H XUNHUAN

EQU

37H BIANLIANG

EQU

38H GRAPHRAM1

EQU

39H GRAPHRAM2

EQU

40H GRAPHRAM3

EQU

41H GRAPHRAM4

EQU

42H XXX

EQU

43H YYY

EQU

44H KEY

EQU

45H LEDHEAD

EQU

21H

TEST

BIT 100 BITS

BIT 99 RIGHT

BIT 98 LEFT

BIT 97 DOWN

BIT 96 HARD

BIT 95 TURN

BIT 94 KEYDOWN

BIT 93 TESTING

BIT 92 BOTTOM

BIT 91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序由此处开始执行;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;START: MOV

TCON,#00000001B;;;;;;;;;;;;;设置外部中断0响应方式为下降沿触发 SETB

EX0 SETB

EA MOV

SP,#60H;;;;;;;;;;;;;;;;;;;;;将堆栈指针SP设置在RAM的高地址处 MOV

R7,#6;;;;;;;;;;;;;;;;;;;;;;R7作为存放0-6这7个随机数的变量

MOV

P0,#11111111B;;;;;;;;;;;;;;;;;;;;;;将P0口最为输入口 LCALL

WRITEGRAPHTORAM CLR

TESTING GAMELOOP:;CLR

EA LCALL

SHOWGRAPH MOV

R6,#30 TIMING: LCALL

SHOWLEDRAM LCALL

DJNZ

LCALL

JNB

ABCD: MOV

CJNE

LCALL

LCALL

JMP

NEXT1:;JB

JMP

KEY1: CLR

CLR

MOV

CJNE

LCALL

JB

LCALL

LCALL

LCALL

KEY2: CJNE

LCALL

JB

LCALL

LCALL

LCALL

KEY3: CJNE

;LCALL

;JNB

DELAY

R6,TIMING

DOWNTEST DOWN,NEXT1

A,28H A,#0,GAMEOVER

REMOVEBLOCK

WRITEGRAPHTORAM GAMELOOP KEYDOWN,KEY1 KEY4 TESTING KEYDOWN

A,KEY A,#1,KEY2;1-LEFT

LEFTTEST LEFT,KEY4

CLEANGRAPH

MOVELEFT

GAMELOOP A,#2,KEY3;2-RIGHT

RIGHTTEST RIGHT,KEY4

CLEANGRAPH

MOVERIGHT

GAMELOOP A,#4,KEY4;4-ROTATE

ROTATIONTEST

TURN,KEY4

LCALL

CLEANGRAPH LCALL

ROTATION JMP

GAMELOOP KEY4: CJNE

A,#8,KEY5 SWEAT: LCALL

DOWNTEST JB

DOWN,GAMELOOP LCALL

CLEANGRAPH LCALL

MOVEDOWN JMP

SWEAT KEY5: LCALL

CLEANGRAPH LCALL

MOVEDOWN INC

R7 CJNE

R7,#7,NEXT5 MOV

R7,#0 NEXT5: JMP

GAMELOOP GAMEOVER: MOV

R0,#8 MOV

R1,#LEDHEAD CLEAR: LCALL

CLEANGRAPH MOV

@R1,#0 INC

R1 DJNZ

R0,CLEAR MOV

R0,#4 MOV

R1,#GRAPHRAM1 ASDF: MOV

A,@R1 ADD

A,#16 MOV

@R1,A INC

R1 DJNZ

R0,ASDF JMP

GAMELOOP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;测试图形是否能向下移动;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DOWNTEST: PUSH

0 PUSH

PUSH

PUSH

PUSH

B PUSH

ACC

MOV

R2,#4 MOV

R0,#GRAPHRAM1 DOWN0: MOV

A,@R0 SUBB

A,#8 MOV

B,A MOV

R3,#4 CLR

C MOV

R1,#GRAPHRAM1 DOWN2: CLR

C SUBB

A,@R1 JZ

DOWN1 INC

R1 MOV

A,B DJNZ

R3,DOWN2 LCALL

TESTBIT JB

BITS,DOWN3 DOWN1: INC

R0 DJNZ

R2,DOWN0 CLR

DOWN JMP

HOPE DOWN3: SETB

DOWN;DOWN WEI YI BIAO SHI BU NENG WANG CPL

P3.4 JMP

DOWN4 HOPE: MOV

R2,#4 MOV

R0,#GRAPHRAM1 YOUQIANG2: MOV

R3,#1 CCC2: MOV

A,R3 MOV

B,A CLR

C SUBB

A,@R0 JNZ

CCC1 SETB

DOWN SETB

BOTTOM JMP

DOWN4

XIA YI DONG CCC1: MOV

A,B INC

R3 CJNE

R3,#9,CCC2 INC

R0 DJNZ

R2,YOUQIANG2 DOWN4: POP

ACC POP

B POP POP POP POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;外部中断0中断处理程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERRUPT: PUSH

0 PUSH

PUSH

ACC INC

R7 CJNE

R7,#7,INTT MOV

R7,#0 INTT: SETB

TESTING SETB

KEYDOWN MOV

A,P0 CPL

A MOV

KEY,A POP

ACC POP POP

0 RETI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;测试能否旋转

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;向下移动

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOVEDOWN: PUSH

0 PUSH

PUSH

ACC MOV

R0,#GRAPHRAM1 MOV

R1,#4 MOVE1: MOV

A,@R0 CLR

C SUBB

A,#8 MOV

@R0,A INC

R0 DJNZ

R1,MOVE1 POP

ACC POP POP

0 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;向左移动

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOVELEFT: PUSH

0 PUSH

PUSH

ACC MOV

R0,#GRAPHRAM1 MOV

R1,#4 MOVE2: MOV

A,@R0 CLR

C SUBB

A,#1 MOV

@R0,A INC

R0 DJNZ

R1,MOVE2 POP

ACC POP POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;向右移动

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOVERIGHT: PUSH

0 PUSH

PUSH

ACC MOV

R0,#GRAPHRAM1 MOV

R1,#4 MOVE3: MOV

A,@R0 CLR

C INC

A

MOV

@R0,A INC

R0 DJNZ

R1,MOVE3 POP

ACC POP POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;将图形写入RAM缓存中;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WRITEGRAPHTORAM: PUSH

ACC PUSH

B PUSH

0 PUSH PUSH PUSH MOV

R1,#4 MOV

A,R7 MOV

B,#4 MUL

AB MOV

R2,A MOV

R0,#GRAPHRAM1 MOV

DPTR,#GRAPH WRITEGRAPH: MOV

A,R2 MOVC

A,@A+DPTR;SUBB

A,#16 MOV

@R0,A INC

R2 INC

R0 DJNZ

R1,WRITEGRAPH POP

POP

POP

POP

0 POP

B POP

ACC RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;测试某一个二进制位是否为1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;TESTBIT: PUSH

0 PUSH PUSH

B PUSH

ACC MOV

B,#8 DIV

AB MOV

R0,A MOV

A,B CJNE

A,#0,TEST3 MOV

A,R0 DEC

A JMP

TEST4 TEST3: MOV

A,R0 TEST4:

MOV

DPTR,#TAB1

MOV

R1,#LEDHEAD ADD

A,R1 MOV

R1,A MOV

A,B MOVC

A,@A+DPTR ANL

A,@R1 CJNE

A,#0,TEST1 CLR

BITS JMP

TEST2 TEST1: SETB

BITS TEST2: POP

ACC POP

B POP

POP

0 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;测试图形是否能向左移动;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LEFTTEST: PUSH

0 PUSH

PUSH

PUSH

PUSH

B PUSH

ACC MOV

R2,#4 MOV

R0,#GRAPHRAM1 LEFT0: MOV

A,@R0 CLR

C SUBB

A,#1 MOV

B,A MOV

R3,#4;CLR

C MOV

R1,#GRAPHRAM1 LEFT2: CLR

C SUBB

A,@R1 JZ

LEFT1 INC

R1 MOV

A,B DJNZ

R3,LEFT2 LCALL

TESTBIT JB

BITS,LEFT3

LEFT1: INC

R0 DJNZ

R2,LEFT0 CLR

LEFT JMP

LEFT4 LEFT3: SETB

LEFT;DOWN WEI YI BIAO SHI BU NENG WANG CPL

P3.4 JMP

LEFT5 LEFT4: MOV

R2,#4 MOV

R0,#GRAPHRAM1 YOUQIANG: MOV

R3,#9 MOV

A,#1 HHH2:

MOV

B,A CLR

C

XIA YI DONG SUBB

A,@R0 JNZ

HHH1 SETB

LEFT JMP

LEFT5 HHH1: MOV

A,B ADD

A,#8 DJNZ

R3,HHH2 INC

R0 DJNZ

R2,YOUQIANG LEFT5: POP

ACC POP

B POP POP POP POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;测试图形是否能向右移动;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;RIGHTTEST: PUSH

0 PUSH

PUSH

PUSH

PUSH

B PUSH

ACC MOV

R2,#4 MOV

R0,#GRAPHRAM1 RIGHT0: MOV

A,@R0 ADD

A,#1 MOV

B,A MOV

R3,#4;CLR

C MOV

R1,#GRAPHRAM1 RIGHT2: SUBB

A,@R1 JZ

RIGHT1 INC

R1 MOV

A,B DJNZ

R3,RIGHT2

LCALL

TESTBIT JB

BITS,RIGHT3 RIGHT1: INC

R0 DJNZ

R2,RIGHT0 CLR

RIGHT JMP

RIGHT4 RIGHT3: SETB

RIGHT;DOWN WEI YI BIAO SHI BU NENG WANG CPL

P3.4 JMP

RIGHT5 RIGHT4: MOV

R2,#4 MOV

R0,#GRAPHRAM1 YOUQIANG1: MOV

R3,#8 MOV

A,#8 III2:

MOV

B,A CLR

C SUBB

A,@R0 JNZ

III1 SETB

RIGHT JMP

RIGHT5 III1: MOV

A,B ADD

A,#8 DJNZ

R3,III2 INC

R0 DJNZ

R2,YOUQIANG1 RIGHT5: POP

ACC POP

B POP POP POP POP

0 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;图形旋转

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

XIA YI DONG ROTATION: PUSH

0 PUSH PUSH PUSH PUSH

B PUSH

ACC MOV

A,GRAPHRAM1;A=50 MOV

B,#8 DIV

AB

;A=6 B= 2 MOV

HANG,A

;HANG = 6 MOV

LIE,B

;LIE = 2 MOV

R3,#4 MOV

R0,#GRAPHRAM1 ROTATESTART: MOV

A,@R0 MOV

B,#8 DIV

AB

CLR

C SUBB

A,HANG

MOV

R1,A

MOV

A,B CLR

C SUBB

A,LIE MOV

R2,A;;;;;;;;;;;;;;;;;;X2=-Y1 Y2=X1 MOV

A,#0 CLR

C SUBB

A,R2;-Y1 MOV

B,R1;X1 MOV

R1,A;X2=-Y1 MOV

R2,B;Y2=X1 MOV

A,R1 ADD

A,HANG MOV

R1,A MOV

A,R2 ADD

A,LIE MOV

R2,A MOV

A,R1 MOV

B,#8 MUL

AB ADD

A,R2

MOV

@R0,A

INC

R0 DJNZ

R3,ROTATESTART POP

ACC POP

B POP

POP

POP

POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示LEDRAM中的内容;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SHOWLEDRAM: PUSH

0 PUSH PUSH

B PUSH

ACC MOV

R0,#LEDHEAD MOV

R1,#8 MOV

A,#AA SHOW1: MOV

P1,A MOV

P2,@R0

LCALL

DELAY

INC

R0 RL

A DJNZ

R1,SHOW1 POP

ACC POP

B POP

POP

0 RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;软件延时

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DELAY: PUSH PUSH MOV

R1,#5 FQFQ: MOV

R2,#200 FWFW: DJNZ

R2,FWFW DJNZ

R1,FQFQ POP

POP

RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;清楚图形在LEDRAM中的内容;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CLEANGRAPH: PUSH

ACC PUSH MOV

A,#GRAPHRAM1 MOV

XUNHUAN,#4 MOV

R1,A DADA1: MOV

A,@R1;SUBB

A,#16 LCALL

WRITEPOINT0 INC

R1 DJNZ

XUNHUAN,DADA1 POP

POP

ACC

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示图形在LEDRAM中的内容;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SHOWGRAPH: PUSH

ACC PUSH

MOV

A,#GRAPHRAM1 MOV

XUNHUAN,#4 MOV

R1,A DADA2: MOV

A,@R1;SUBB

A,#16 LCALL

WRITEPOINT1 INC

R1 DJNZ

XUNHUAN,DADA2 POP

POP

ACC

RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;消除已经填满的行

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;REMOVEBLOCK: PUSH

0 PUSH PUSH

B PUSH

ACC REMOVESTART: MOV

R0,#1 MOV

R1,#LEDHEAD REMOVE2: MOV

A,@R1 CJNE

A,#11111111B,REMOVE1

MOV

@R1,#00000000B MOV

REMOVEROW,R0 LCALL

DOWNBLOCK

JMP

REMOVESTART REMOVE1: INC

R0 INC

R1 MOV

A,R0 CJNE

A,#9,REMOVE2 POP

ACC POP

B POP

POP

0 RET DOWNBLOCK: PUSH

0 PUSH PUSH

B PUSH

ACC MOV

R0,#1 DOWN11: MOV

A,REMOVEROW MOV

B,#8 MUL

AB ADD

A,R0 LCALL

DOWNSTEP LCALL

JUSTMOVE INC

R0 MOV

A,R0 CJNE

A,#9,DOWN11 POP

ACC POP

B POP

POP

0 RET

DOWNSTEP: PUSH

0 PUSH PUSH

B PUSH

ACC MOV

R0,#0 MOV

R1,REMOVEROW STEP2: CLR

C SUBB

A,#8 LCALL

TESTBIT JB

BITS,STEP1 INC

R0 DJNZ

R1,STEP2 STEP1: MOV

STEPS,R0 POP

ACC POP

B POP

POP

0 RET

JUSTMOVE: PUSH

0 PUSH PUSH PUSH

B PUSH

ACC MOV

R0,A MOV

A,STEPS MOV

B,#8 MUL

AB MOV

B,A MOV

A,R0 CLR

C SUBB

A,B MOV

R1,A MOV

R2,REMOVEROW

MOV

A,#8 CLR

C SUBB

A,R2 MOV

JUST3: MOV

LCALL

JB

MOV

LCALL

JMP

JUST1: MOV

LCALL

JUST2: MOV

ADD

MOV

MOV

ADD

MOV

DJNZ

MOV

DDD: MOV

LCALL

MOV

ADD

MOV

DJNZ

JUSTEND:

POP

POP

POP

POP

POP

RET R2,A A,R0 TESTBIT BITS,JUST1 A,R1 WRITEPOINT0 JUST2 A,R1 WRITEPOINT1 A,R0 A,#8 R0,A A,R1 A,#8 R1,A R2,JUST3 R2,REMOVEROW A,R1 WRITEPOINT0 A,R1 A,#8 R1,A R2,DDD ACC B 2 1 0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;将某个二进制位写1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WRITEPOINT1: PUSH

0 PUSH PUSH PUSH PUSH

B PUSH

PUSH

PUSH

CLR

MOV

SUBB

JNC

MOV

MOV

MOV

DIV

MOV

MOV

CJNE

MOV

DEC

JMP

WRITE11: MOV

WRITE12: ADD

MOV

MOV

MOV

MOV

MOV

MOVC

ORL

MOV

END1: POP

POP

POP

POP

POP

ACC DPH DPL C R0,A A,#65 END1 A,R0 R1,#LEDHEAD B,#8 AB R0,A A,B A,#0,WRITE11 A,R0 A WRITE12 A,R0 A,R1 R1,A A,@R1 R2,A DPTR,#TAB1 A,B A,@A+DPTR A,R2 @R1,A DPL DPH ACC B 3

POP

POP

POP

0 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;将某个二进制位写0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WRITEPOINT0: PUSH

0 PUSH PUSH PUSH

B PUSH

ACC PUSH

DPH PUSH

DPL

MOV

R0,A CLR

C SUBB

A,#65 JNC

END2 MOV

A,R0 MOV

R1,#LEDHEAD MOV

B,#8 DIV

AB MOV

R0,A MOV

A,B CJNE

A,#0,WRITE01 MOV

A,R0 DEC

A JMP

WRITE02 WRITE01: MOV

A,R0 WRITE02: ADD

A,R1 MOV

R1,A MOV

A,@R1 MOV

R2,A MOV

DPTR,#TAB2 MOV

A,B MOVC

A,@A+DPTR ANL

A,R2 MOV

@R1,A END2: POP

DPL POP

DPH POP

ACC POP

B POP

POP

POP

0 RET GRAPH:

DB

69,60,61,62,69,68,61,62,69,70,60,61,69,70,61,62,69,77,61,62,69,77,61,60,69,69,61,77

TAB1:

DB

00000001B,10000000B,01000000B,00100000B,00010000B,00001000B,00000100B,00000010B TAB2:

DB

11111110B,01111111B,10111111B,11011111B,11101111B,11110111B,11111011B,11111101B

END

下载C语言编写俄罗斯方块论文word格式文档
下载C语言编写俄罗斯方块论文.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言 程序代码编写规范

    C语言 程序代码编写规范(初级程序员 讨论版)前言 一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效......

    c语言编写单片机感想

    用C语言对单片机编程感想 起先接触单片机,单片机的程序是用汇编语言编写的。汇编语言是面向机器的低级语言,保持了机器语言的优点,具有直接和简捷的特点,目标代码简短,占用内存少......

    如何编写论文[优秀范文5篇]

     毕业论文的撰写及答辩是学生毕业的必备条件,是高等职业教育中专业教育的重要组成部分,是学习阶段“收束”的标志,是每个学生专业知识运用与创新的重要体现。它是应考者的总结......

    技术论文编写技巧

    齿轮箱滤油技术 1 题目是科技论文的中心和总纲。 要求准确恰当、简明扼要、醒目规范、便于检索。一篇论文题目不要超出20个字。用小2号黑体加粗,居中。 步骤阅读 2 署名 署......

    论文编写原则与方法大全

    前几天谈到了论文提纲的定义、重要性,今天来谈谈论文提纲的编写原则与方法。一、论文提纲的编写原则(一)要有全局观念,从整体出发去检查每一部分在论文中所占的地位和作用。看......

    Word编写论文十大技巧

    现在正是大学毕业生完成毕业设计、撰写毕业论文的时候,大家往往要苦熬一个多月才能完成自己的毕业论文。现在大家主要都是用Microsoft Word来编辑论文(不论各位用哪个版本,基......

    论文编写格式及其说明(共5则范文)

    论文编写格式及其说明作者1作者2/(1.某某单位名称1;2.某某单位名称2)【摘要】 摘要内容摘要内容摘要内容,摘要内容摘要内容摘要内容摘要内容摘要内容摘要内容,摘要内容摘要内容摘......

    论文后附“参考文献”编写体例

    论文后附“参考文献”编写体例参考文献是在学术研究过程中,对某一著作或论文的整体的参考或借鉴。征引过的文献在注释中已注明,不再出现于文后参考文献中。 简介 (1)文后参......