自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

指尖飞舞

得之坦然,失之淡然,顺其自然,争其必然~~~

  • 博客(455)
  • 资源 (36)
  • 问答 (1)
  • 收藏
  • 关注

原创 中国电信 CTExcel - 亲测境外首选电话卡(推荐码:SHQL 或 KJNC)

官网中国电信美洲公司CTExcelhttps://www.ctexcel.us/index_pc.jsp?language=zh微信公众号 - “中国电信美洲公司”亲测好用因为公司内部调动,12月要去美国工作。机缘巧合,看到了网友推荐的境外电话卡 - 中国电信CTExcel。哈哈,是不是必须点进去瞅一眼~ 这一看一对比不要紧,当下就决定出国就用它了。话不多说,看图:...

2018-12-13 11:46:37 6813 6

原创 React 入门 04 - props 和 state

前言在前文React 入门 03 - 元素与组件中学习了React基础元素与组件,今天来探究一下React组件的两个基本属性props和state的用法与区别。它们的一个重要的不同点就是:props是传递给组件的(类似于函数的形参),具有只读特性,是不可修改的。state是组件内自己管理的(类似于函数内声明变量),是可以用特定方式进行值更新的。propsprops(“propert...

2020-04-09 14:33:48 401

原创 React 入门 03 - 元素与组件

前言从React 入门 02 - JSX学习了JSX的基本用法,本文我们开始深入探讨React 元素与组件。React 元素元素是构成React引用的最小砖块,描述了你在屏幕上想看到的内容。与浏览器的 DOM 元素不同,React 元素是创建开销极小的普通对象。React DOM 会负责更新 DOM 来与 React 元素保持一致。ReactDOM.render(...) 即用...

2020-04-09 03:20:54 412

原创 React 入门 02 - JSX

前言在 React 入门 01 - Hello World中,简单了解了下React基本概念以及如何运用到Html中。现在我们学习一下在React中配合使用最多的JSX相关知识。JSXJSX,是一个 JavaScript 的语法扩展。比如如下行语句,它既不是单纯Html语句也不是普通Java Script。JSX 可以很好地描述 UI 应该呈现出它应有交互的本质形式,在React中配合...

2020-04-08 06:40:07 400

原创 React 入门 01 - Hello World

前言基于项目需求,最近开始不得不接触前端开发的领域啦。吼吼,从此是不是可以成为所谓全栈开发了????~此系列学习笔记依然是以帮助自己学习、消化以及回忆为目的,将会涉及学习React,Type Script 以及目标 React Native 的心路历程。Git ????戳我吧~ReactReact 官方系列教程是我学习的主要参考资料。React 是一个用于构建用户界面的 JavaScri...

2020-04-08 05:45:14 355

原创 改善代码质量编程规范 - 学习总结

命名与注释命名范围项目名 包名 接口名 类名 函数名 变量名 参数名原则建议准确达意 对不同作用域,合理选择不同的长度。作用域较小如局部变量,可使用较短的缩写。 参考经典开源系统,使用耳熟能详的名字 借助上下文简化命名 借助类的信息简化属性和函数的命名,无需在属性和函数名字中再加入类名 借助函数的信息简化参数的命名 增加可读、可搜索醒 避免使...

2020-02-06 09:58:48 527

原创 Java Collections - Array 和 String 常用函数

Array基本操作完整代码请戳????GitHub~Array to String使用 Arrays.toString(...) 将数组转换为基本字符串。String[] array = new String[] {"One", "Two", "Three"};System.out.println(array); // [Ljava.lang.String;@61bbe9baSy...

2019-10-10 07:25:02 538

转载 Get to know Lambda and Functional Interfaces in Java 8

In simple words, a lambda expression is an instance of a functional interface. But a lambda expression itself does not contain the information about which functional interface it is implementing; that...

2019-10-09 07:19:05 190

转载 Java hashCode() and equals() – Contract, rules and best practices

A good article to talk about Java hashCode and equals.

2019-10-08 06:04:36 232

原创 Leetcode 961. N-Repeated Element in Size 2N Array

题目In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeated N times.Return the element repeated N times. Example 1:Input: [1,2,3,3]Output: 3E...

2019-01-11 14:33:42 520

原创 Leetcode 965. Univalued Binary Tree

题目A binary tree is univalued if every node in the tree has the same value.Return true if and only if the given tree is univalued. Example 1:Input: [1,1,1,1,1,null,1]Output: trueExampl...

2019-01-11 14:07:48 617

原创 Leetcode 971. Flip Binary Tree To Match Preorder Traversal

题目Given a binary tree with N nodes, each node has a different value from {1, ..., N}.A node in this binary tree can be flipped by swapping the left child and the right child of that node.Conside...

2019-01-09 15:19:51 600

原创 LeetCode 970. Powerful Integers

题目Given two non-negative integers x and y, an integer is powerful if it is equal to x^i + y^j for some integers i >= 0 and j >= 0.Return a list of all powerful integers that have value less ...

2019-01-07 15:01:05 432

原创 LeetCode 771. Jewels and Stones

题目You're given strings J representing the types of stones that are jewels, and S representing the stones you have.  Each character in S is a type of stone you have.  You want to know how many of the...

2019-01-04 15:18:42 254

原创 Log4j、Log4j 2、JUL、JCL 、SFL4J 、Logback 与 Lombok 的使用

Log4JLog4j = Log for Java.Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。     Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE<DEBUG<INFO<...

2018-03-12 16:18:14 2856

原创 LeetCode(617) Merge Two Binary Trees

题目Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.You need to merge them into a new bin

2017-09-10 16:30:17 1264

原创 LeetCode(657)Judge Route Circle

题目Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back tothe original place. The move sequence is repres

2017-09-03 14:43:50 1127

原创 LeetCode(461) Hamming Distance

题目The Hamming distance between two integers is the number of positions at which the corresponding bits are different.Given two integers x and y, calculate the Hamming distance.Note:0 ≤ x,

2017-09-03 14:24:09 884

转载 面向对象OOA、OOD、OOP

OOAObject-Oriented Analysis:面向对象分析方法OOA是指在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别,OOA强调在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。OOA(面向对象的分析)模型由五个层次:主题层、对象类层、结构层、属性层和服务层,五

2017-05-15 18:03:23 5920 1

原创 IntelliJ IDEA Ultimate 安装&激活

序搞了两年多的C++,然而由于未来工作语言选择,又要奔回Java ~\(≧▽≦)/~啦啦啦~向有经验的同学打听了下,大部分公司选择的IDE都是IntelliJ IDEA。既然又认识了一个新工具,必须先拿来练练手呀,不能入职之后,对于工具还是小白吧~安装先去官网IntelliJ看一看,有两个版本:Community免费版可用于开发简单的J2SE项目,但对于J2EE,JS等

2016-12-22 11:02:33 27361 1

转载 C++实现单例模式

单例模式单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了。一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一

2016-09-23 21:22:23 928

转载 三次握手的第三个ACK包丢了——客户端认为连接建立,写数据时,会触发RST

序上次面试被问到一个问题,在TCP建立连接的三次握手阶段,如果客户端发送的第三个ACK包丢了,那么客户端和服务器端分别进行什么处理?听到问题,一下愣掉,有点傻了,根据读书时模模糊糊的印象,答了答,无疑打错了T...T分析当Client端收到Server的SYN+ACK应答后,其状态变为ESTABLISHED,并发送ACK包给Server; 如

2016-09-17 15:40:53 5258 2

原创 LintCode (192)通配符匹配

题目判断两个可能包含通配符“?”和“*”的字符串是否匹配。匹配规则如下:'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个串完全匹配才算匹配成功。函数接口如下:bool isMatch(const char *s, const char *p)您在真实的面试中是否遇到过这个题?样例一些例子:isMa

2016-09-02 21:16:02 1391

原创 将搜索二叉树转换成双向链表

题目对二叉树的节点来说, 有本身的值域, 有指向左孩子和右孩子的两个指针; 对双向链表的节点来说,有本身的值域, 有指向上一个节点和下一个节点的指针。 在结构上, 两种结构有相似性, 现在有一棵搜索二叉树, 请将其转换为一个有序的双向链表。分析用两种方法求解本题。方法一:由于是搜索二叉树,直接求出其中序遍历序列,构造双向链表即可。方法二:采用递归实现

2016-09-01 16:18:59 1302

原创 LeetCode(87) Scramble String

题目Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.Below is one possible representation of s1 = "great": great /

2016-08-31 17:31:00 747

原创 LeetCode(191)Number of 1 Bits

题目Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).For example, the 32-bit integer ’11' has binary representatio

2016-08-29 21:55:53 1096

原创 LeetCode(326) Power of Three

题目Given an integer, write a function to determine if it is a power of three.分析本题判断给定一个整数是否为3的整次幂,不可用递归和循环。32bit表示的int,3的整次幂最大数为1162261467,所以只需判断给定整数n能否被该最大数整除即可。代码class S

2016-08-29 21:50:02 1067

原创 LeetCode(231) Power of Two

题目Given an integer, write a function to determine if it is a power of two.分析判断给定整数是否为2的整次幂。当该整数对应的二进制串中只有1位1时,必然为2的整次幂。只需判断n&(n-1)是否为0即可。代码#include #include using namespace

2016-08-29 21:29:51 869

原创 LeetCode(350)Intersection of Two Arrays II

题目Given two arrays, write a function to compute their intersection.Example:Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2].Note:Each element in the result should appe

2016-08-29 21:21:17 965

原创 LeetCode(383)Ransom Note

题目Given
 an 
arbitrary
 ransom
 note
 string 
and 
another 
string 
containing 
letters from
 all 
the 
magazines,
 write 
a 
function 
that 
will 
return 
true 
if 
the 
ransom 
 note 
can 
be

2016-08-29 20:38:16 939

原创 LeetCode(389) Find the Difference

题目Given two strings s and t which consist of only lowercase letters.String t is generated by random shuffling string s and then add one more letter at a random position.Find the letter t

2016-08-29 20:28:00 1888

原创 递归与非递归求二叉树深度

题目分别用递归与非递归算法求二叉树深度。分析方法一:递归方法大家都很熟悉,如何用非递归求解呢?我们知道二叉树有层序遍历,利用层序遍历的过程,记录当前层数,那么遍历结束后也就求得二叉树的层数,即深度。方法二:层序遍历需要使用一个队列来保存树的节点。初始化讲根节点入队。接着只要队列不为空,则出队,并将出队元素的子节点入队。当需要记录树的深

2016-08-26 11:47:43 3950

原创 LeetCode(179) Largest Number

题目Given a list of non negative integers, arrange them such that they form the largest number.For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.Note: The result m

2016-08-25 21:22:14 1164

原创 LeetCode(349)Intersection of Two Arrays

题目Given two arrays, write a function to compute their intersection.Example:Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].分析求两个数组的交集,结果不含重复元素。代码/*349. Intersection

2016-08-25 20:26:37 920

原创 LeetCode(371) Sum of Two Integers

题目Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.Example:Given a = 1 and b = 2, return 3.分析考察位运算,不用+ - 计算两数之和。代码/*371. Sum of

2016-08-24 21:28:07 872

原创 LeetCode(386)Lexicographical Numbers

题目Given an integer n, return 1 - n in lexicographical order.For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9].Please optimize your algorithm to use less time and space. The

2016-08-23 22:02:15 2323

原创 LeetCode(387)First Unique Character in a String

题目Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.Examples:s = "leetcode"return 0.s = "loveleetcode",return 2.

2016-08-23 20:34:06 2210

原创 LeetCode(344) Reverse String

题目Write a function that takes a string as input and returns the string reversed.Example:Given s = "hello", return "olleh".分析字符串逆转,左右指针。代码class Solution {public:

2016-08-15 22:14:49 771

原创 LeetCode(130) Surrounded Regions

题目Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'.A region is captured by flipping all 'O's into 'X's in that surrounded region.For exam

2016-08-15 22:04:38 1735

原创 LeetCode(85) Maximal Rectangle

题目Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.For example, given the following matrix:1 0 1 0 01 0 1 1 11 1 1

2016-08-14 20:54:47 778

备忘录模式实现及案例

本例包含备忘录模式的C#实现,及一个应用案例,加深理解与运用。

2013-02-05

适配器模式(Adepter)C#实现及案例

本例描述的是适配器模式(Adepter)的基本原理C#代码实现,以及一个应用案例,有助于加深对该模式的理解,为了能学以致用,建议收藏一份哦

2013-02-04

状态模式C#实现及案例

本例描述的是状态模式的C#代码实现 以及一个小案例 为了深入理状态模式便于学以致用 一定收藏一份哦

2013-02-04

各种排序的C++算法实现(插入排序、合并排序、堆排序、快速排序)

全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见http://blog.csdn.net/fly_yr/article/details/8544847 合并排序:MergeSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550097 快速排序:QuickSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8551300 收藏一份会有用的~

2013-01-29

原型模式(ProtoType)C#应用案例

一个原型设计模式的应用案例,C#语言编写,有助于设计模式的理解和学以致用。

2013-01-28

工厂方法模式应用案例

根据工厂方法模式的理论,使用C#语言写的两个模式应用案例,有助于设计模式的理解和学以致用。

2013-01-28

代理模式应用小例子C#

C#写的一份包含代理模式Proxy的基本实现代码和一个应用案例代码,有助于Proxy的理解和学以致用。

2013-01-27

装饰设计模式

一个应用装饰模式的小例子,有利于对装饰Decorator的理解~

2013-01-26

策略设计模式

本例是一个利用C#编写的关于策略模式应用的小例子,便于对策略模式的理解与应用。

2013-01-25

简单工厂设计模式小例子

本例子是用C#写的一个关于应用简单工厂设计模式的小例子,一个简单计算器的控制台应用程序。

2013-01-25

java+jsp+tomcat学生管理系统

1.1 目的:    通过本学生信息管理系统软件,能帮助各校指导员及教务人员、利用计算机,快速方便的对学生资料进行管理、输入、输出、查找、统计的所需操作,使散乱的学生档案能够具体化,直观化、合理化。 1.2 任务    我们的学生信息管理系统需要分权限处理,对于学生登陆时只能查询自己的相关信息,在安全管理菜单中修改个人登陆密码,不能对其个人信息、课程以及成绩信息进行修改、删除操作;教师登陆时可以查询个人、所有同学或者指定同学的相关信息,并且可以录入学生对应课程成绩操作以及修改个人登陆密码;系统管理员为该系统的最高权限管理者,管理菜单包括管理学生基本信息的增删改查、课程录入,老师基本信息的增删改查、课程录入以及系统安全管理等各种主要功能。 1.3 开发环境; 操作系统: Windows XP 集成开发工具:MyEclipse 8.5 编译环境:J2SDK 1.5    Web服务器:Tomcat 6.0    数据库:SQL Server 2005

2013-01-01

C#读当前系统运行进程以及内存使用情况

C#的窗体应用程序 ,读取当前系统中运行的所有进程,并得到每个进程的使用内存数据,以及包括刷新和结束某个进程的功能。

2013-01-01

java 绘图板程序

  小型的绘图板程序(采用多文档结构),包括基本的菜单栏、工具栏、工具箱、绘图区域以及状态栏。   (1)菜单栏:主要包含文件、编辑、设置、窗口、帮助、界面风格这六项常用菜单。其中文件包含新建、打开、关闭、保存、另存为、退出;编辑包含清空画板;设置包含背景颜色、线条颜色、画笔粗细;窗口包含层叠窗口、横向平铺、纵向平铺、工具栏、工具箱、状态栏;帮助包含关于、帮助;界面风格包含Java Look & Feel 、 motif Look & Feel 、 Windows Style Look & Feel。   (2)工具栏: 包含菜单栏主要功能并附加文本输入的格式,字体风格、大小等;   (3)工具箱:橡皮、文本、随画笔、直线、矩形、圆、椭圆、圆角矩形、填充矩形、填充圆、填充椭圆、填充圆角矩形;   (4)状态栏:显示当前绘图区域中鼠标的坐标、背景颜色、线条颜色、绘图工具;   (5)绘图区:实现多文档结构绘制十种基本图形,并附加橡皮擦,文本输入;

2012-12-31

JDBC与Java数据库编程

JDBC与Java数据库编程的参考资料,备一份有助于功力增长哦~

2012-12-14

安装java JDK 配置java环境

安装java 配置java环境 超级详细步骤有图有真相

2012-12-14

C++ MFC实现飞机大战游戏

目 录 1. 概述 3 1.1 实训项目简介 3 1.2 实训功能说明 3 1.2.1 基本功能 3 1.2.2 附加功能 3 2. 相关技术 4 2.1 Windows定时器技术 4 2.2 透明贴图实现技术 4 2.3 CObList链表 5 2.4获取矩形区域 6 2.5使用AfxMessageBox显示游戏过程中的提示信息 6 2.6内存释放 6 2.7 CImageList处理爆炸效果 6 2.8对话框的应用 6 3. 总体设计与详细设计 7 3.1 系统模块划分 7 3.2 主要功能模块 8 3.2.1 系统对象类图 8 3.2.2 系统主程序活动图 9 3.2.3 系统部分流程图 9 4. 编码实现 12 4.1 绘制游戏背景位图程序 12 4.2 飞机大战游戏对象的绘制程序 13 4.3 飞机大战游戏对象战机位置的动态控制 15 4.4 飞机大战游戏对象之间的碰撞实现 17 4.5 游戏界面输出当前信息 19 5. 项目程序测试 20 5.1战机移动及子弹发射模块测试 20 5.2 敌机及炸弹模块测试 20 5.3 爆炸模块测试 20 6. 实训中遇到的主要问题及解决方法 21 7. 实训体会 21 1. 概述 1.1 实训项目简介   本次实训项目是做一个飞机大战的游戏,应用MFC编程,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。 1.2 实训功能说明 1.2.1 基本功能   (1)设置一个战机具有一定的速度,通过键盘,方向键可控制战机的位置,空格键发射子弹。   (2)界面中敌机出现的位置,以及敌机炸弹的发射均为随机的,敌机与敌机炸弹均具有一定的速度,且随着关卡难度的增大,数量和速度均增加。   (3)对于随机产生的敌机和敌机炸弹,若超过矩形区域,则释放该对象。   (4)添加爆炸效果,包括战机子弹打中敌机爆炸、敌机炸弹打中战机爆炸、战机与敌机相撞爆炸以及战机子弹与敌机炸弹相撞爆炸四种爆炸效果。且爆炸发生后敌机、子弹、炸弹均消失,战机生命值减一。 1.2.2 附加功能   (1) 为游戏界面添加了背景图片,并在战机发射子弹、战机击中敌机、敌机击中战机、以及战机敌机相撞时均添加了背景音效。   (2)为游戏设置了不同的关卡,每个关卡难度不同,敌机与敌机炸弹的速度随着关卡增大而加快,进入第二关以后敌机从上下方均会随机出现,且随机发射炸弹。   (3)第一关卡敌机从上方飞出,速度一定,战机每打掉一直敌机则增加一分,每积十分,则为战机增加一个生命值,当战机得分超过50分则可进入下一关;进入第二、三关时敌机速度加快,分别从上下两方飞出,此时战机每得分20、30分,才会增加一个生命值,得分超过100、150分则进入下一关、通关。   (4) 在游戏界面输出当前游戏进行信息,包括当前得分、当前关卡以及击中敌机数量。   (5)增加了鼠标控制战机位置这一效果,战绩的位置随着鼠标的移动而移动,并且点击鼠标左键可使得战机发射子弹。   (6)实现了暂停游戏的功能,玩家可通过键盘上的‘Z’键,对游戏进行暂停。   (7)通过对话框的弹出可提示玩家是否查看游戏说明、是否进入下一关、是否重新开始等消息,使得玩家可自己选择。 2. 相关技术 2.1 Windows定时器技术   Windows定时器是一种输入设备,它周期性地在每经过一个指定的时间间隔后就通知应用程序一次。程序将时间间隔告诉Windows,然后Windows给您的程序发送周期性发生的WM_TIMER消息以表示时间到了。本程序中使用多个定时器,分别控制不同的功能。在MFC的API函数中使用SetTimer()函数设置定时器,设置系统间隔时间,在OnTimer()函数中实现响应定时器的程序。 2.2 透明贴图实现技术   绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。   在详细介绍实现过程之前先介绍下所使用的画图函数以及函数参数所代表的功能;整个绘制过程需要使用到BitBlt()函数。整个功能的实现过程如下:    (1) 创建一张大小与需要绘制图像相同的位图作为“掩码”位图;    (2) 将新创建的“掩码”位图存储至掩码位图的设备描述表中;    (3) 把位图设备描述表的背景设置成“透明色”,不需要显示的颜色;    (4) 复制粘贴位图到“掩码”位图的设备描述表中,这个时候“掩码”位图设备描述表中存放的位图与位图设备描述表中的位图一样;    (5) 把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;    (6) 把“掩码”位图与这个时候对话框相应区域的背景进行逻辑与的操作;    (7) 重复步骤5的操作,把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;    (8) 最后把系统的画笔还给系统,删除使用过的GDIObject,释放非空的指针,最后把新建的设备描述表也删除。 2.3 CObList链表 MFC类库中提供了丰富的CObList类的成员函数,此程序主要用到的成员函数如下:(1) 构造函数,为CObject指针构造一个空的列表。 (2) GetHead(),访问链表首部,返回列表中的首元素(列表不能为空)。(3) AddTail(),在列表尾增加一个元素或另一个列表的所有元素。   (4) RemoveAll(),删除列表中所有的元素。   (5) GetNext(),返回列表中尾元素的位置。   (6) GetHeadPosition(),返回列表中首元素的位置。   (7) RemoveAt(),从列表中删除指定位置的元素。   (8) GetCount(),返回列表中的元素数。 在CPlaneGameView.h文件中声明各游戏对象与游戏对象链表:   (1)//创建各游戏对象 CMyPlane *myplane; CEnemy *enemy; CBomb *bomb; CBall *ball; CExplosion *explosion; (2)//创建存储游戏对象的对象链表 CObList ListEnemy; CObList ListMe; CObList ListBomb; CObList ListBall; CObList ListExplosion; 2.4获取矩形区域   首先,使用CRect定义一个对象,然后使用GetClientRect(&对象名)函数,获取界面的矩形区域rect.Width() 为矩形区域的宽度,rect.Height()为矩形区域的高度。   使用IntersectRect(&,&))函数来判断两个源矩形是否有重合的部分。如果有不为空,则返回非零值;否则,返回0。 2.5使用AfxMessageBox显示游戏过程中的提示信息   AfxMessageBox()是模态对话框,你不进行确认时程序是否往下运行时,它会阻塞你当前的线程,除非你程序是多线程的程序,否则只有等待模态对话框被确认。   在MFC中,afxmessagebox是全局的对话框最安全,也最方便。 2.6内存释放   在VC/MFC用CDC绘图时,频繁的刷新,屏幕会出现闪烁的现象,CPU时间占用率相当高,绘图效率极低,很容易出现程序崩溃。及时的释放程序所占用的内存资源是非常重要的。   在程序中使用到的链表、刷子等占用内存资源的对象都要及时的删除。Delete Brush, List.removeall()等。 2.7 CImageList处理爆炸效果   爆炸效果是连续的显示一系列的图片。如果把每一张图片都显示出来的话,占用的时间是非常多的,必然后导致程序的可行性下降。CImageList是一个“图象列表”是相同大小图象的集合,每个图象都可由其基于零的索引来参考。可以用来存放爆炸效果的一张图片,使用Draw()函数来绘制在某拖拉操作中正被拖动的图象,即可连续绘制出多张图片做成的爆炸效果。 2.8对话框的应用    在设置游戏难度、炸弹的速度等,使用对话框进行设置非常方便,又体现出界面的友好。    对话框的应用过程如下:    (1). 资源视图下,添加Dialog对话框。然后添加使用到的控件,并修改控件的ID以便于后面的使用。    (2). 为对话框添加类,在对话框模式下,点击项目,添加类。    (3). 在类视图中,为对话框类添加成员变量(控件变量)。设置变量的名称、类型、最值等信息。    (4). 在资源视图菜单中,选择相应的菜单项,右击添加时间监听程序,设置函数处理程序名称。    (5). 在处理程序函数中添加相应的信息。 3. 总体设计与详细设计 3.1 系统模块划分   该飞机大战游戏程序分为游戏背景位图绘制模块、各游戏对象绘制模块、游戏对象之间的碰撞模块、爆炸效果产生模块、游戏界面输出玩家得分关卡信息模块。   其中在游戏对象绘制模块中,战机是唯一对象,在游戏开始时产生该对象,赋予其固定的生命值,当其与敌机对象、敌机炸弹碰撞时使其生命值减一,直至生命值为零,便删除战机对象。敌机对象与敌机炸弹对象的绘制中采用定时器技术,定时产生。爆炸对象初始化为空,当游戏过程中即时发生碰撞时,在碰撞位置产生爆炸对象,添加到爆炸链表中。 3.2 主要功能模块 3.2.1 系统对象类图            CGameObject是各个游戏对象的抽象父类,继承自CObject类,其他的类:战机类、敌机类、爆炸类、子弹类、炸弹类、文字类都继承了此类。   每个游戏对象类中既继承了来自父类CGameObject的属性,又有自己的特有属性和方法。 3.2.2 系统主程序活动图    3.2.3 系统部分流程图 (1) 该飞机大战游戏执行流程图: (2) 利用定时器定时产生敌机并绘制敌机流程图 4. 编码实现 4.1 绘制游戏背景位图程序   CDC *pDC=GetDC();   //获得矩形区域对象   CRect rect;   GetClientRect(&rect;);   //设备环境对象类----CDC类。   CDC cdc;   //内存中承载临时图像的位图   CBitmap bitmap1;   //该函数创建一个与指定设备兼容的内存设备上下文环境(DC)   cdc.CreateCompatibleDC(pDC);   //该函数创建与指定的设备环境相关的设备兼容的位图。   bitmap1.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());   //该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。   CBitmap *pOldBit=cdc.SelectObject(&bitmap1;);   //用固定的固体色填充文本矩形框   cdc.FillSolidRect(rect,RGB(51,255,255)); //添加背景图片   CBitmap bitmap_BackGround;   bitmap_BackGround.LoadBitmap(IDB_BACKGROUND);   BITMAP bimap2;//位图图像   bitmap_BackGround.GetBitmap(&bimap2;);   CDC cdc_BackGround;//定义一个兼容的DC   cdc_BackGround.CreateCompatibleDC(&cdc;);//创建DC   CBitmap*Old=cdc_BackGround.SelectObject(&bitmap;_BackGround);   cdc.StretchBlt(0,0,rect.Width(),rect.Height(),&cdc;_BackGround,0,0,bimap2.bmWidth,bimap2.bmHeight,SRCCOPY); 4.2 飞机大战游戏对象的绘制程序 //画战机对象(唯一) if(myplane!= NULL) { myplane->Draw(&cdc;,TRUE); } //设置定时器,随机添加敌机,敌机随机发射炸弹,此时敌机速度与数量和关卡有关 SetTimer(2,300,NULL);//敌机产生的定时器 SetTimer(3,500,NULL);//敌机炸弹产生的定时器   if(myplane!=NULL&& is_Pause == 0) { switch(nIDEvent) { case 2://设置定时器产生敌机 { if(pass_Num == 1)//第一关 { int motion =1;//设置敌机的方向,从上方飞出 CEnemy *enemy=new CEnemy(motion); ListEnemy.AddTail(enemy);//随机产生敌机 }//if else if(pass_Num >= 2)//第一关以后的关卡 { int motion1 = 1; //设置敌机的方向,从上方飞出 CEnemy *enemy1=new CEnemy(motion1); enemy1->SetSpeed_en((rand()%5 +1)* pass_Num); ListEnemy.AddTail(enemy1);//随机产生敌机 int motion2 = -1;//设置敌机的方向,从下方飞出 CEnemy *enemy2=new CEnemy(motion2); enemy2->SetSpeed_en((rand()%5 +1)* pass_Num); ListEnemy.AddTail(enemy2);//随机产生敌机 }//else if }//case break; }//switch //判断产生的敌机是否出界,若已经出界,则删除该敌机 POSITION posEn=NULL,posEn_t=NULL; posEn=ListEnemy.GetHeadPosition(); int motion = 1; while(posEn!=NULL) { posEn_t=posEn; CEnemy *enemy= (CEnemy *)ListEnemy.GetNext(posEn); //判断敌机是否出界 if(enemy->GetPoint().xGetPoint().x>rect.right ||enemy->GetPoint().yGetPoint().y>rect.bottom) { ListEnemy.RemoveAt(posEn_t); delete enemy; }//if else { enemy->Draw(&cdc;,TRUE); switch(nIDEvent) { case 3://设置定时器产生敌机炸弹 {   CBall*ball=newCBall(enemy->GetPoint().x+17,   enemy->GetPoint().y+30,enemy->GetMotion()); ListBall.AddTail(ball); }//case break; }//switch }//else }//while //判断产生的敌机炸弹是否出界,若已经出界,则删除该敌机炸弹 POSITION posball=NULL,posball_t=NULL; posball= ListBall.GetHeadPosition(); while(posball!=NULL) { posball_t=posball; ball= (CBall *) ListBall.GetNext(posball); if( ball->GetPoint().xGetPoint().x>rect.right || ball->GetPoint().yGetPoint().y>rect.bottom) { ListBall.RemoveAt(posball_t); delete ball; }//if else { ball->Draw(&cdc;,1); }//else }//while }//if 4.3 飞机大战游戏对象战机位置的动态控制 if(myplane!= NULL) { myplane->Draw(&cdc;,TRUE); } //获得键盘消息,战机位置响应,战机速度speed为30 if((GetKeyState(VK_UP) <0 || GetKeyState('W') GetPoint().ySetPoint( myplane->GetPoint().x,rect.bottom); else myplane->SetPoint(myplane->GetPoint().x,( myplane->GetPoint().y - speed) ); }//if if((GetKeyState(VK_DOWN) <0|| GetKeyState('S') < 0)&& is_Pause== 0)//下方向键{}//if if((GetKeyState(VK_LEFT) <0|| GetKeyState('A') < 0)&& is_Pause== 0)//左方向键{}//if if((GetKeyState(VK_RIGHT) <0|| GetKeyState('D') < 0)&& is_Pause== 0)//右方向键{}//if if((GetKeyState(VK_SPACE)GetPoint().x, myplane->GetPoint().y,1); ListBomb.AddTail(BombOne); CBomb*BombTwo=newCBomb(myplane->GetPoint().x+35, myplane->GetPoint().y,1); ListBomb.AddTail(BombTwo); PlaySound((LPCTSTR)IDR_WAVE2,AfxGetInstanceHandle(),SND_RESOURCE |SND_ASYNC); }//if if(GetKeyState('Z')SetPoint(point.x,point.y); } //鼠标控制战机,发射战机子弹 void CPlaneGameView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnLButtonDown(nFlags, point); if( is_Pause == 0) { CBomb *BombOne=new CBomb( myplane->GetPoint().x, myplane->GetPoint().y,1); PlaySound((LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC); ListBomb.AddTail(BombOne); CBomb *BombTwo=new CBomb( myplane->GetPoint().x+35, myplane->GetPoint().y,1); ListBomb.AddTail(BombTwo); } } 4.4 飞机大战游戏对象之间的碰撞实现 本飞机大战游戏中的碰撞考虑了飞机子弹打中敌机、敌机炸弹打中战机、战机与敌机相撞、敌机炸弹与战机子弹相撞四种情况,根据游戏对象的矩形区域是否有交叉,而确认两者是否相撞,而产生爆炸对象,添加到爆炸链表中。以战机与敌机相撞为例: if(myplane != NULL&& is_Pause== 0) { POSITION enemyPos,enemyTemp; for(enemyPos= ListEnemy.GetHeadPosition();(enemyTemp=enemyPos)!=NULL;) { enemy =(CEnemy *) ListEnemy.GetNext(enemyPos); //获得敌机的矩形区域 CRect enemyRect = enemy->GetRect(); //获得战机的矩形区域 CRect myPlaneRect = myplane->GetRect(); //判断两个矩形区域是否有交接 CRect tempRect; if(tempRect.IntersectRect(&enemyRect;,myPlaneRect)) { CExplosion *explosion = new CExplosion( enemy->GetPoint().x+18 , enemy->GetPoint().y + 18); PlaySound((LPCTSTR)IDR_WAVE,AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC); ListExplosion.AddTail(explosion); //战机生命值减一 lifeNum_Me--; //删除敌机 ListEnemy.RemoveAt(enemyTemp); delete enemy; if(lifeNum_Me == 0) { //删除战机对象 delete myplane; myplane=NULL; }//if break; }//if }//for }//if 战机子弹打中敌机、敌机炸弹打中战机以及战机子弹与敌机炸弹对象的碰撞实现同上。 4.5 游戏界面输出当前信息   if(myplane != NULL&& is_Pause== 0)    {    HFONT font;    font=CreateFont(20,10,0,0,0,0,0,0,0,0,0,100,10,0);    cdc.SelectObject(font);    CString str;    cdc.SetTextColor(RGB(255,0,0));    str.Format(_T("当前关卡:%d"),pass_Num);    cdc.TextOutW(10,20,str);    str.Format(_T("当前得分:%d"),score_Me);    cdc.TextOutW(10,40,str);    str.Format(_T("剩余生命:%d"),lifeNum_Me);    cdc.TextOutW(10,60,str);    }//if    if(myplane !=NULL && lifeNum_Me >0)    {    if(score_Me > 10*count_Life*pass_Num)    {    lifeNum_Me++;//生命值加1    count_Life++;//已增加生命值加1    }    } 游戏进入下一关,以及结束游戏界面设计代码与上类似。 5. 项目程序测试 5.1战机移动及子弹发射模块测试 用例 预期结果 实际结果 问题描述 修改方案 点击A键或鼠标左移 战机向左移动 战机向左移动 点击D键或鼠标右移 战机向右移动 战机向右移动 点击W键或鼠标上移 战机向上移动 战机向上移动 点击S键或鼠标上移 战机向下移动 战机向下移动 5.2敌机及炸弹模块测试 用例 预期结果 实际结果 问题描述 修改方案 玩家得分50(通过第一关后) 敌机从上下两方向均可飞出,且速度不断增加 敌机从上下两方向均可飞出,且速度不断增加 5.3爆炸模块测试 用例 预期结果 实际结果 问题描述 修改方案 战机子弹打中敌机 敌机位置处爆炸,敌机消失,战机生命-1 敌机位置处爆炸,敌机消失,战机生命-1 敌机炸弹打中战机 战机位置处爆炸,战机生命-1 战机位置处爆炸,战机生命-1 敌机战机相撞 敌机位置处爆炸,敌机消失,战机生命-1 敌机位置处爆炸,敌机消失,战机生命-1 战机子弹与敌机炸弹相撞 敌机炸弹处爆炸,子弹与炸弹均消失消失 敌机炸弹处爆炸,子弹与炸弹均消失消失 战机生命值==0 战机消失,GameOver或者过关 战机消失,GameOver或者过关 6. 实训中遇到的主要问题及解决方法   (1)由于对C++的面向对象的思想和逻辑思路不熟悉,不明白其中的封装之类的以及多态的思想,致使开始真正的进入实训接触到项目时没有开发思路,通过逐步查询书籍整理C++面向对象编程思路,才逐步理清项目的开发步骤。   (2)本飞机大战的游戏要求使用链表实现各游戏对象的存储和释放,由于链表知识掌握的不牢固,使用起来总是出现这样那样的错误,给整个游戏开发带来了很大的障碍,通过不断的调试修改,最终使程序正确运行。   (3)在绘制各种游戏对象—敌机和敌机炸弹时,开始使用随机函数,画出敌机时而很少,总是打不到预定的效果,后来经过修改使用定时器产生敌机和敌机炸弹,使整个游戏更加人性化。 7. 实训体会 (1)在本次飞机大战游戏项目的开发过程中遇到很多问题,大部分是因为对MFC编程的不熟悉以及链表掌握不牢固所导致的。 (2)MFC编程中有很多可以直接调用的函数,由于之前缺乏对这方面编程的经验,以至于本次项目开发过程中走了很多弯路。 (3)通过寻求老师和同学的帮助,解决了开发中遇到的很多问题,也提升了自己调试错误的能力。 (4)通过本次实训,使我熟悉了MFC编程技术、巩固了链表的使用方法并加深了对面向对象编程思想的理解,对以后程序的编写打下了良好的基础。

2012-12-04

C语言桌面万年历

Calendar已完成任务: 基本功能: //(1)表盘动态输出系统时间hour:minute:decond //(2) 表盘输出当天系统星期 //(3)显示农历日期 //(4)显示天干地支信息 //(5)显示公历日期 //(6)右击“日历”显示当前系统日期、节气、阳历阴历节日 //(7)年份、月份增减按钮、下拉框 动态变化显示日期 //(8)设置整点报时,并将是否开启信息写入文件,记住信息 扩展功能: //(1)皮肤的更换,并将信息写入文件,记住皮肤 //(2)设置闹钟,并将信息写入文件,记住闹钟 //(3)设置纪念日,并将信息写入文件,记住纪念日 //(4)设置铃声,并将信息写入文件,记住铃声 //(5)调节时钟大小(一倍、二倍、三倍)

2012-12-04

学生信息管理系统

该系统实现学生信息管理,是一个javaWeb项目,运用MVC三层架构。

2012-11-28

VNC 配置 Centos7

VNC 配置 Centos7,此文档详细叙述了, CentOS配置VNC server的方法,以实现远程连接桌面

2016-01-26

CentOS7安装及网络配置完整过程(可解决Dell R730)

CentOS7安装及网络配置完整过程(可解决Dell R730)

2016-01-26

Linux聊天室 -- select && 多线程实现

项目简介: 采用I/O复用技术select实现socket通信,采用多线程负责每个客户操作处理,完成Linux下的多客户聊天室! OS:Ubuntu 15.04 IDE:vim gcc make DB:Sqlite 3 Time:2015-12-09 ~ 2012-12-21 项目功能架构: 1. 采用client/server结构; 2. 给出客户操作主界面(注册、登录、帮助和退出)、登录后主界面(查看在线列表、私聊、群聊、查看聊天记录、退出); 3. 多客户可同时连接服务器进行自己操作; ##服务器端## 1. server.c:服务器端主程序代码文件; 2. config.h:服务器端配置文件(包含需要的头文件、常量、数据结构及函数声明); 3. config.c:服务器端公共函数的实现文件; 4. list.c:链表实现文件,用于维护在线用户链表的添加、更新、删除操作; 5. register.c:服务器端实现用户注册; 6. login.c:服务器端实现用户登录; 7. chat.c:服务器端实现用户的聊天互动操作; 8. Makefile:服务器端make文件,控制台执行make命令可直接生成可执行文件server ##客户端## 1. client.c:客户端主程序代码文件; 2. config.h:客户端配置文件(包含需要的头文件、常量、数据结构及函数声明); 3. config.c:客户端公共函数的实现文件; 4. register.c:客户端实现用户注册; 5. login.c:客户端实现用户登录; 6. chat.c:客户端实现用户的聊天互动操作; 7. Makefile:客户端make文件,控制台执行make命令可直接生成可执行文件client;

2015-12-22

C++程序设计语言(特别版) Bjarne Stroustrup著 习题部分代码实现

C++程序设计语言(特别版) Bjarne Stroustrup著 习题部分代码实现

2015-03-27

C++程序设计语言(特别版) Bjarne Stroustrup著 习题详解(含目录)

C++程序设计语言(特别版) Bjarne Stroustrup著 习题详解(含目录)

2015-03-27

Windows下Lex与Yacc配置必备工具

Windows平台下学习Lex与Yacc的必备工具,flex-2.5.4a-1.exe 和 bison-2.4.1-setup.exe 以及 cygwin2.738 的安装文件

2015-01-22

MinGW开发工具

我们使用的flex和bison都是GNU的工具,所以为了方便,采用的c/c++编译器也是GNU的编译器GCC,需要WINDOWS版的MinGW编译器。安装完毕后,将MinGW下的bin目录添加到系统环境变量的Path中。

2015-01-09

lex与Yacc所需flex.exe bison.exe

flex.exe和bison.exe是UnxUtils包中的文件,已经将许多Unix/Linux平台的程序都移植到了Windows平台,解压缩之后在系统的PATH环境变量中增加UnxUtils所有的exe文件所在的目录,使 得DOS命令行可以直接搜索到flex.exe和bison.exe,然后将 bison需要的bison.simple和bison.hairy两个文件,分别设置环境变量 BISON_HAIRY指向bison.hairy,BISON_SIMPLE指向bison.simple。

2015-01-09

44-compilers Principles Techniques & Tools-2006

一个很好的关于编译原理的教材。希望帮助有需要的朋友~

2014-03-23

2014年华中科技大学计算机研究生复试机试

2014年华中科技大学计算机研究生复试刚刚结束,将本人所记忆的机试题目分享一下,给需要的人。

2014-03-16

2011年华中科技大学计算机机试及代码

2011年华中科技大学计算机机试及代码,供广大考研学子,参考。

2014-03-10

2012年华中科技大学计算机机试

2012年华中科技大学计算机机试题目,供参考学习。

2014-03-10

2013年华中科技大学计算机机试题目及代码

2013年华中科技大学计算机机试题目及代码 宝贵资源,考研学子参考,若有错误敬请提醒更正。

2014-03-10

Web服务器的java实现

目标:采用Socket和多线程技术,实现一个java Web服务器,加深对HTTP的认识。 新建java项目 webServer 新建java文件 WebServer.java Processor.java   一、HTTP协议的作用原理   WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型, 由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是 Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP协议的作用原理包括四个步骤:   (1) 连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。   (2) 请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:   GET 路径/文件名 HTTP/1.0   文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。   (3) 应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。   例:假设客户机与www.mycompany.com:8080/mydir/index.html建立了连接,就会发送GET命令:GET /mydir/index.html HTTP/1.0。主机名为www.mycompany.com的Web服务器从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。   为了告知 Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。 常用的HTTP头信息有:   ① HTTP 1.0 200 OK   这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码“200 OK”表示请求完成。   ② MIME_Version:1.0   它指示MIME类型的版本。   ③ content_type:类型   这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。   ④ content_length:长度值   它指示HTTP体信息的长度(字节)。   (4) 关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。   二、Java实现Web服务器功能的程序设计   根据上述HTTP协议的作用原理,实现GET请求的Web服务器程序的方法如下:   (1) 创建ServerSocket类对象,监听端口8080。这是为了区别于HTTP的标准TCP/IP端口80而取的;   (2) 等待、接受客户机连接到端口8080,得到与客户机连接的socket;   (3) 创建与socket字相关联的输入流instream和输出流outstream;   (4) 从与socket关联的输入流instream中读取一行客户机提交的请求信息,请求信息的格式为:GET 路径/文件名 HTTP/1.0   (5) 从请求信息中获取请求类型。如果请求类型是GET,则从请求信息中获取所访问的HTML文件名。没有HTML文件名时,则以index.html作为文件名;   (6) 如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件内容通过socket传回给Web浏览器,然后关闭文件。否则发送错误信息给Web浏览器;   (7) 关闭与相应Web浏览器连接的socket字。

2013-02-15

DTD教程.chm中文版

DTD教程.chm中文版,用于学习掌握xml中的DTD知识。

2013-02-15

23种JAVA设计模式和15种J2EE设计模式

23种JAVA设计模式和15种J2EE设计模式

2013-02-15

深入浅出设计模式(中文版)

《深入浅出设计模式》描述了23种设计模式与软件开发之间的联系和应用。

2013-02-15

组合模式C#实现及案例

本例主要包含组合模式的C#实现,以及一个应用案例,加深该模式理解与运用。

2013-02-05

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除