学 生 实 习 报 告
实 习 名 称 毕 业 实 习
院部名称 龙蟠学院
专 业 计算机科学与技术
班 级 M08计算机嵌入式
学 生 姓 名
学 号
实 习 地 点 无锡软通动力埃卡内基培训基地
指 导 教 师
实习起止时间: 20## 年7月 3 日至 20##年 7月29日
金陵科技学院教务处制
实习报告
前言
从目前的游戏市场来看,以互联网为平台的互动社交型游戏越来越受广大玩家的欢迎,如享誉全球的暴雪神作《World of Warcraft》(中文音译:魔兽世界)等等,他们影响了一代游戏人的价值观。而每一个成功的网络游戏背后,都有一个优秀的网络游戏设计团队为之费尽心力。
越爱越多的IT人才意识到这些契机,游戏设计开发团队也如雨后春笋一般崛起,于是就产生了竞争,而竞争则是市场优胜劣汰的最大表现方式。
我组成员六人,却是抱着试一试的态度来尝试这次设计,一方面锻炼自己,一方面又追求着能够超越自我。
我们所设计的网络游戏《The Lost》(中文音译:迷失的位面),它基于传统题材——迷宫,但又加入了网络元素,集益智与休闲为一体,将成为绝大多数人的最佳选择。
一、 实习目的
1、掌握嵌入式微处理器的结构与原理
2、掌握一个嵌入式Linux操作系统
3、熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。
二、 实习时间
20##年07月05号~07月29号,具体安排如下表:
三、实习地点
无锡市埃卡内基培训学院
四、实习单位和部门
实习单位:无锡软通动力公司
实习部门:无锡软通动力公司
五、实习内容
1、虚拟机下的linux的安装
目前PC机上的虚拟机软件有:VMWare、Virtual PC。
(1)VMWare的安装与配置
首先,要安装VMware 软件必须要有相应的安装程序,用户可下载程序vmware-workstation,然后就可以按步安装。
(2)在VMware中安装Linux,New—>Virtual Machine…->选择“custom”下一步->下一步,出现的界面中选择安装路径,必须注意待安装盘有足够的空间。因为后面安装的RedHat系统是桌面版本,它对内存还是有一定的要求,在机器内存较大的情况下,尽可能给RedHat多分配一些内存,此处分配的内存是256MB。下面可以选择默认选择,最后单击”Close”,此时虚拟机已经建立起来了。
接下来光盘配置使用我们下载的RedHat是iso文件,单击OK按钮。下面就可以启动安装RedHat系统了。首先进行语言的选择,选择中文,并单击前进按钮。接下来选择时区,此处选择上海时区,单击前进按钮。在进行用户帐户和主机命名设置时,我用“zxy”作为登录名且同时作为这台计算机的名称。安装向导的最后一步将用户安装过程中所做过的配置信息再次反馈给用户,确认信息。最后点击“安装”即可。
2、学习linux常用命令
1)cd【目录】: 切换到指定的目录,可以是相对路径或者是绝对路径。绝对路径是以“ / ”开头,从目录的最顶层开始列出目录路径。相对路径不用“ / ”开头,只列出当前工作目录以下的目录路径。
2)ls【选项】【文件目录列表】:显示指定工作目录中所包含的内容的指令是ls,要说明的是ls命令列出文件的名字,而不是文件的内容。
3)mkdir【选项】 路径: “路径”可以是一系列,此时若路径中的目录不存在,则系统自动创建那些不存在的目录。
4)Pwd:显示的是当前工作目录的绝对路径。
5)cp【选项】源文件 目标文件或目标目录
6)mv【选项】 文件列表 目录
7)rm【选项】 文件列表:可从文件系统中删除文件及整个目录。
8)cat【选项】文件列表:用来将几个文件的内容相连接,并显示到终端上。
9)Clear:清除屏幕上的信息。
10)kill进程号:删除执行中的进程。
11)tar [选项] 文件或者目录:文件打包解包。
12)ifconfig网络接口【选项】【地址】:配置网络接口的地址、网络掩码等。
13)gcc[选项]要编译的文件 [选项] [目标文件]:编译可执行文件。
3、绘制迷宫
//游戏界面边框初始位置(使用不敏感的按钮控件模拟边界)
用FIXED控件来固定边框的位置
gtk_fixed_put() //固定控件的位置
//游戏横向障碍的位置
用FIXED控件来固定横向障碍的位置
gtk_fixed_put () //固定控件的位置
//游戏纵向障碍的位置
用FIXED控件来固定横向障碍的位置
gtk_fixed_put ()//固定控件的位置
//游戏终点位置
gtk_fixed_put ()//固定控件的位置
//游戏横向障碍尺寸
用 gtk_widget_set_size_request() //固定控件的尺寸大小
//游戏纵向障碍尺寸
用gtk_widget_set_size_request () //固定控件的尺寸大小
//游戏界面人物初始位置
game_x = 10;
game_y = 10;
gtk_fixed_put( GTK_FIXED(fixed), people, game_x, game_y );//用FIXED控件固定任务初始位置。
4、用户登录与注册
注册功能的实现
服务器端主函数main()定义初始的用户列表、接收客户端注册请求、发送反馈和保存新用户信息
//接收客户端信息
bzero( id, sizeof(id) );
if ( recv( newsockfd, id, sizeof(id), 0 ) < 0 )
{
perror("recv");
exit(1);
}
//发送反馈信息
send( newsockfd, “OK”, sizeof(“OK”), 0)
客户端注册函数int cb_reg_reg( GtkWidget *widget, gpointer data )发送用户注册请求、接收服务器端反馈
//向服务器发送注册请求
strcpy( buff, "reg" );
if ( send( sockfd, buff, sizeof(buff), 0 ) < 0 )
{
perror("send");
exit(1);
}
//接收服务器端的反馈信息
recv( newsockfd, id, sizeof(id), 0 )
客户端还要对2次输入的密码做一致性的判断
若2次密码不一致,弹出密码不一致的提示,否则发送信息
最后对服务器发来的反馈做出提示
弹出注册成功、用户已存在的窗口提示
登录功能的实现
服务器端主函数main()定义初始的用户列表、接收客户端登录请求、分析客户端请求类型、发送反馈
接收、发送的代码与注册类似
使用 if ( !(strcmp( id, “login” )) ) 来判断是登录请求还是注册请求
客户端登录函数int cb_login( GtkWidget *widget, gpointer data )发送用户登录请求、接收服务器端反馈
使用一个计数器total来记录服务器端的反馈
若total=0则提示用户未注册
若total=1则提示用户密码错误
若total=2则提示用登录成功并隐藏登录界面、打开游戏界面
5、人物移动与障碍
//实现该功能的思路及伪代码
用FIXED控件来固定和移动人物的位置
gtk_fixed_put() //固定控件的位置
gtk_fied_move() //移动控件的位置
用game_x,game_y表示人物的移动坐标
通过键盘捕捉回调函数“key_press_event”实现窗口对方键的捕捉
//键盘控制回调
g_signal_connect(G_OBJECT(game_window),"key_press_event",G_CALLBACK(cb_game_key), NULL );
移动时改变X,Y坐标每次30
game_x += 30; //X坐标右移30
//移动的实现:例如向上走时
switch(event->keyval)
{
case GDK_Up:
game_y -= 30;//Y坐标上移30
gtk_fixed_move( GTK_FIXED(fixed), people, game_x, game_y );
break;
}
//障碍的实现
用对X,Y的限制来表示障碍的存在
例如:向上走时
if ( ( game_y == 40 )&&( game_x >= 280 )&&( game_x < 370 ) )
break;
如果人物在Y坐标40上时X的坐标为280到370之间,则不允许
向上移动
伪代码如下面所示:
gboolean cb_game_key( GtkWidget *widget, GdkEventKey *event,
gpointer data )
{
switch(event->keyval)
{
case GDK_Up:
if ( game_y == 10 ) break;
如果上面有墙则break;
game_y -= 30;//Y坐标上移30;
人物移动到相应的Y轴;
Break;
}
}
6、界面制作
//登录窗口建立
login_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title( GTK_WINDOW(login_window), "The Lost!" );
gtk_window_set_default_size( GTK_WINDOW(login_window), 300, 200 );
//注册窗口建立
reg_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title( GTK_WINDOW(reg_window), "注册你的帐号" );
gtk_window_set_default_size( GTK_WINDOW(reg_window), 300, 250 );
//注册成功窗口建立
reg_ok_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size( GTK_WINDOW(reg_ok_window), 200, 100 );
//游戏窗口建立
game_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title( GTK_WINDOW(game_window), "欢迎来个The Lost迷失的位面" );
gtk_window_set_default_size( GTK_WINDOW(game_window), 470, 390 );
7、回调函数
使用g_signal_connect()函数实现点击按钮触发回调函调
例如登录成功后打开游戏界面:
//回调语句
g_signal_connect( G_OBJECT(login), "clicked",
G_CALLBACK(cb_login), NULL );
//登录函数
int cb_login( GtkWidget *widget, gpointer data )
{
gtk_widget_hide(login_window);
gtk_widget_show_all(game_window);
8、总体程序设计
使用Socket编写服务器端和客户端的链接
服务器端 客户端
Socket() Socket()
↓ ↓
Bind() Bind()
↓ ↓
Listen()
↓ Connect()
Accpet()
↓ ↓
Close()
将各个组员的成果整合到程序中,实现最终的编写和调试。
编写一个服务器端源代码srv.c,一个客户端源代码lost.c,并制作一个Makefile。
Makefile中编译gtk需要使用特殊参数,整合在Makefile中:
CFLAGS = `pkg-config --cflags ${LIBS}` -g -Wall
LDFLAGS = `pkg-config --libs ${LIBS}` -g –Wall
${CC} -o savedid savedid.o ${LDFLAGS}
${CC} -c $< ${CFLAGS}
程序的调试和编译
最终剩余一些指针类型的警告,并不影响运行
最终实现功能:
登录:初始用户登录、注册用户登录、用户不存在提示、密码不正确提示
注册:新用户注册、注册成功提示、用户存在提示、密码不一致提示
人物移动:方向键控制移动、有障碍则不能通过
胜利:到达终点弹出胜利提示
9、设计总结
为了完成本次网络游戏设计项目,我们全组成员都投入了百分之二百的热情,并将项目分成了若干块,每人都有自己的任务,而我的任务则是关于编码的含义注释以及最终的文档构造。
首先,在参与设计的过程中,每一步编码的中文注释是必不可少,为了让其他人能明确了解某一步在整个编码程序中的作用,而又不过与冗长,编码注释务必简洁,使一个从未接触到项目设计的人都能够一目了然。
当注释完成之后,整个PPT文档语言的组织也是重中之重,它不仅要反映我们所设计的项目能产生的作用效果,更要体现全组在设计过程中的思想理念。
为了完成本次网络游戏设计项目,我们全组成员都投入了百分之二百的热情,并将项目分成了若干块,每人都有自己的任务,而我的任务则是关于编码的含义注释以及最终的文档构造。
首先,在参与设计的过程中,每一步编码的中文注释是必不可少,为了让其他人能明确了解某一步在整个编码程序中的作用,而又不过与冗长,编码注释务必简洁,使一个从未接触到项目设计的人都能够一目了然。
当注释完成之后,整个PPT文档语言的组织也是重中之重,它不仅要反映我们所设计的项目能产生的作用效果,更要体现全组在设计过程中的思想理念。
10、测试结果及发现
通过初次的测试,发现程序在点右上角“X”关闭的时候会出现问题。当点“X”闭关时,会导致下次无法调用“X”掉的窗口。后来给“X”键关闭添加退出程序回调函数,使得点“X”之后直接退出程序。
在对系统进行压力测试后,发现系统反应良好,没有出现崩溃和网络延迟等现象。
六、实习总结
在项目设计中,我们的任务是开发一个迷宫网络游戏,在整个设计过程中我们认真完成了各个功能的详细设计,尽量去实现模块间的协调和整个系统的完整性、可靠性,达到为顾客提供比较全面的服务的目的。
我们从需求分析,概要设计,详细设计,代码编写一步步进行设计。最终,软件基本上实现的迷宫游戏的功能,实现了登录注册,移动,障碍,但也存在很多的缺点和漏洞,如果可以设计更多的关卡和元素,会让整个游戏的可玩性上升一个档次。
通过该系统的研制,使得我对计算机有了一种新的体验:追求实用才是学好计算机的关键。任何一门技术都要以能够解决实际工作中出现的问题为依据和评判优劣的基本依据。