重庆邮电大学 Linux操作系统内核原理与设计期末论文

合集下载

基于Linux内核的操作系统设计与实现

基于Linux内核的操作系统设计与实现

基于Linux内核的操作系统设计与实现近年来,随着互联网技术的快速发展,计算机操作系统的重要性日益凸显。

同时,Linux操作系统的广泛应用也成为了互联网时代中不可或缺的一部分。

Linux操作系统以其稳定性、高可靠性、安全性、免费和开放源代码等众多优点,成为了众多企业和开发者喜爱的操作系统之一。

而本文将探讨基于Linux内核的操作系统设计与实现的相关知识。

一、Linux内核Linux内核是Linux操作系统最核心的部分,它负责管理计算机的硬件资源和提供操作系统所需的各种系统服务。

Linux内核采用模块化的设计思想,可以动态加载或卸载各种硬件设备驱动程序,实现对硬件资源的有效管理。

同时,Linux内核还提供了各种进程管理和内存管理机制,确保系统的安全性、稳定性和高效性。

基于Linux内核的操作系统可以根据不同的应用场景和需求定制出各种不同的版本,比如服务器版、桌面版、嵌入式版等。

二、操作系统设计1.需求分析操作系统设计的第一步是明确设计目标和需求。

针对不同的应用场景和需求,操作系统的设计目标和需求也有所不同。

比如服务器系统需要保证系统的稳定性和安全性,同时具备高性能和高可扩展性;桌面系统需要具有友好的用户界面和便捷的操作体验,同时要支持多任务处理和多用户环境;嵌入式系统需要具有小巧、高效的特点,同时还要适应各种不同的硬件平台。

2.架构设计操作系统的架构设计是整个系统设计的核心。

现代操作系统一般采用分层结构,将系统的各个功能模块分层次地组织起来,使得系统的设计更加模块化、易于维护和扩展。

操作系统的架构设计中,也需要考虑系统的性能、安全性和可靠性等因素。

3.编程语言和工具选择操作系统的设计和实现需要使用到多种编程语言和工具。

C语言是操作系统设计和实现中使用最广泛的一种编程语言,它可以直接访问系统底层的硬件资源。

除了C语言之外,其他编程语言例如汇编语言、Python等也是操作系统开发中常用的语言。

在工具的选择上,常用的工具有GNU工具集、GCC编译器、make工具等。

Linux操作系统内核原理与优化

Linux操作系统内核原理与优化

Linux操作系统内核原理与优化Linux操作系统作为一种自由软件,已经成为了世界上最受欢迎的操作系统之一。

从最初的开发者Linus Torvalds的手中诞生至今,Linux内核已经迭代了几十年,拥有了成千上万的贡献者和使用者。

本文将从Linux操作系统内核的原理和优化两个角度探讨这个优秀的操作系统。

Linux操作系统内核原理在介绍内核原理之前,我们需要了解一些Linux操作系统的核心概念:1. Linux内核Linux内核是Linux操作系统的灵魂,它是操作系统最底层的部分,负责与计算机硬件进行交互,并管理系统中的各种资源。

内核本身包含了两大部分:系统调用接口和设备驱动程序,它们负责管理进程、内存、I/O等系统资源。

2. 进程Linux中的"进程"是指一个正在运行中的程序的实例。

它包含了该程序的执行状态、环境变量、输入输出等信息。

在Linux中,一个进程可以被其他进程调用或者创建,还可以被操作系统调度。

3. 线程线程是进程内的执行实例,一个进程中可以包含多个线程。

线程共享进程的地址空间和资源,但拥有自己的栈和寄存器等。

一个进程中的线程可以并发执行,提高系统的处理能力。

有了这些基础知识,我们来看看Linux内核的一些核心原理:1. 程序调用系统调用接口在Linux系统中,用户空间程序可以通过系统调用接口来请求内核提供系统资源。

用户程序调用系统调用时,会以中断方式触发内核的相应操作。

由于系统调用通常涉及到I/O操作,会降低系统的效率,因此程序应尽量减少对系统调用的使用。

2. 进程、线程和调度器Linux内核通过调度器来管理进程和线程。

操作系统的维护线程在不同的状态之间转换,比如正在运行、等待、就绪等状态,调度程序分配CPU时间来调度各种进程和线程。

使用优化的调度算法可以提高系统的效率。

3. 内存管理Linux内核通过内存管理器来分配和检索内存。

内存管理器通过对虚拟地址到物理地址的映射,提供不同的内存访问权限,防止进程之间的内存读取和写入互相干扰。

Linux操作系统毕业论文(1)

Linux操作系统毕业论文(1)

Linux操作系统毕业论文(1)Linux操作系统毕业论文随着互联网的普及和计算机技术的不断发展,操作系统作为计算机系统的核心组件,起着举足轻重的作用。

Linux作为一种开源的操作系统,其优越的性能和灵活的定制性已经得到了广泛的认可。

本文将探讨Linux操作系统的特点、应用和发展趋势。

一、 Linux操作系统的特点1.开源性:Linux操作系统的源代码完全公开,任何人都可以浏览、修改、复制和分发。

这种开放性不仅激发了广大开发者的热情,同时也为用户提供了更高的安全性保障。

2.多用户支持:Linux操作系统支持多用户模式,能够同时为多个用户提供服务。

每个用户拥有独立的用户帐号和家目录,保证了每个用户之间的数据私密性。

3.多任务支持:Linux操作系统具有非常出色的多任务支持,能够同时执行多个应用程序。

这种特点不仅提高了系统的效率,同时也为用户提供了更好的用户体验。

4.安全性:Linux操作系统拥有严格的访问控制模式,能够对系统资源和用户数据实现精密的管理和控制。

对于病毒和黑客攻击等威胁,Linux操作系统的安全性也较高。

二、 Linux操作系统的应用1.网络服务器:Linux操作系统被广泛用于搭建各种网络服务器,如Web服务器、邮件服务器、FTP服务器等。

这种应用领域不仅适用于企事业单位,而且适用于个人和小型团队。

2.桌面系统:Linux已经成为了一种成熟的桌面操作系统,如Ubuntu、Fedora、Debian等。

这些操作系统拥有丰富的应用程序和界面,可以满足大部分用户的各种需求。

3.嵌入式系统:Linux能够为嵌入式应用领域提供强大的支持,如路由器、IP电话、数字电视机顶盒等。

这些领域对于空间、功耗、安全性等多方面的要求较高,而Linux正是能够满足这些要求的操作系统。

三、 Linux操作系统的发展趋势1.云计算:随着云计算的普及,Linux作为云计算最为流行的操作系统之一,将会受到更广泛的应用。

linux毕业论文【范本模板】

linux毕业论文【范本模板】

《Linux操作系统》毕业论文Linux操作系统简述关键字:Linux操作系统公开源码Linux是一类Unix计算机操作系统的统称。

Linux操作系统的内核的名字也是“Linux”。

Linux操作系统也是自由软件和开放源代码发展中最著名的例子。

严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。

简单地说,Linux是一套免费使用和自由传播的类Unix 操作系统,它主要用于基于x86系列CPU的计算机上。

这个系统是由世界各地的成千上万的程序员设计和实现的。

其目的是建立不受任何商品化软件的版权制约的、全世界人人都能自由使用的Unix兼容产品。

Linux 操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX操作系统、MINIX操作系统、GNP 计划、POSIX 标准和Internet网络。

早期UNIX的主要特色是结构简炼、便于移植和功能相对强大,经过多来年的发展和进化,形成了一些极为重要并稳定的特色,其中主要包括:一、技术成熟,可靠性高经过30来年开放式道路的发展,UNIX的一些基本技术已变得十分成熟,有的已成为各类操作系统的常用技术.实践表明,UNIX是能达到大型主机(mainframe)可靠性要求的少数操作系统之一。

目前许多UNIX大型主机和服务器在国外的大型企业中每天24小时,每年365天不间断地运行。

例如,不少大企业或政府部门,即所谓肩负关键使命的场合/部门将其整个企业/部门信息系统建立并运行在以UNIX为主服务器的Client/Server结构上。

但到目前为止,世界上还没有一家大型企业将其重要的信息系统完全建立在NT 上。

二、极强的可伸缩性UNIX系统是世界上唯一能在笔记本电脑、PC、工作站,直至巨型机上运行的操作系统,而且能在所有主要CPU芯片搭建的体系结构上运行(包括Intel/AMD及HP—PA、MIPS、PowerPC、ALPHA等RISC芯片)。

Linux操作系统论文

Linux操作系统论文

毕业论文Linux操作系统摘要:Linux提供了像MicrosoftWindows那样的可视的命令输入界面--X Window的图形用户界面〔GUI〕。

它提供了很多桌面环境系统,其操作就像Windows一样,有窗口、图标和菜单,所有的管理都是通过鼠标控制。

GNOME。

每个Linux系统的用户可以拥有他自己的用户界面或Shell,用以满足他们自己专门的Shell需要。

同Linux本身一样,Shell也有多种不同的版本。

主要有以下版本的Shell:Bourne Shell:是贝尔实验室开发的。

BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell。

Korn Shell:是对Bourne SHell的开展,在大局部容上与Bourne Shell兼容。

C Shell:是SUN公司Shell的BSD版本。

Z Shell:The last shell you’ll ever need! Z是最后一个字母,也就是终极Shell。

它集成了bash、ksh的重要特性,同时又增加了自己独有的特性。

关键字:Linux 、Shell、图形用户界面目录摘要 (I)一、引言 (4)二、Shell中的变量 (5)三、Shell的使用 (6)四、常用命令 (7)五、学习心得 (7)一、引言Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。

它是命令语言、命令解释程序及程序设计语言的统称。

shell是用户和Linux核之间的接口程序,如果把Linux核想象成一个球体的中心,shell 就是围绕核的外层。

当从shell或其他程序向Linux传递命令时,核会做出相应的反响。

shell是一个命令语言解释器,它拥有自己建的shell命令集,shell也能被系统中其他应用程序所调用。

用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

有一些命令,比方改变工作目录命令cd,是包含在shell部的。

linux操作系统(论文)

linux操作系统(论文)

Linux操作系统1. 引言Linux操作系统是一种开源的、免费的操作系统,具有稳定性、高性能和安全性等优点,因此在计算机领域得到广泛应用。

本文将着重介绍Linux操作系统的历史、特点、架构以及在实际应用中的优势。

2. 历史2.1 Unix操作系统的起源Linux操作系统起源于Unix操作系统,Unix操作系统由Ken Thompson和Dennis Ritchie在20世纪70年代初开发。

Unix操作系统成为了多用户、多任务操作系统的鼻祖,为后来的操作系统提供了参考和灵感。

2.2 Linux的开发与诞生Linux操作系统的开发始于1991年,当时Linus Torvalds在芬兰赫尔辛基大学上学时开始对自己的个人计算机编写一个操作系统内核。

他将自己的操作系统命名为Linux,并在全球范围内开放源代码,吸引了大量开发者对其进行改进和贡献。

2.3 Linux的发展与应用随着Linux的不断发展,越来越多的人开始使用和推崇Linux操作系统。

Linux操作系统广泛应用于服务器、嵌入式系统、超级计算机等领域,在互联网时代的推动下,Linux形成了一个强大的生态系统。

3. 特点Linux操作系统具有以下主要特点:3.1 开源和免费Linux操作系统是开源的,用户可以自由获取、使用和修改其源代码。

这使得用户能够根据自己的需求对系统进行定制和优化,同时也使得Linux操作系统成为了一种免费的选择。

3.2 稳定性与可靠性由于开源特性和全球开发者的共同努力,Linux操作系统具有出色的稳定性和可靠性。

相比其他操作系统,Linux在长时间运行和高负载情况下表现更好,稳定性得到了业界的广泛认可。

3.3 高度可定制化Linux操作系统提供了丰富的命令行工具和配置选项,使得用户可以根据自己的需要对系统进行高度定制。

这种可定制性使得Linux操作系统适用于各种不同的场景和应用。

3.4 安全性由于开放源代码和许多安全性功能的内置,Linux操作系统被认为是相对较安全的操作系统之一。

《Linux操作系统》结课论文

《Linux操作系统》结课论文

文件系统的概述:由于每个操作系统对于文件的描述方式不一致,通常描述一个文件的信息(权限、拥有者、时间等)有一个专有的名词叫做“元数据”,为了能够让操作系统管理存储在磁盘上的文件,需要对磁盘做一个格式化的操作,格式化操作会为某个磁盘/分区来部署一个文件系统,然后操作系统就可以通过文件系统来管理存储在磁盘上的文件了。

LinuxRPM、YUM的概念和操作及进程管理的概念及管理命令RPM即Red-Hat Package Manager●由Red Hat公司提出,被众多Linux发行版所采用●建立统一的数据库文件●详细记录软件包安装、卸载等变化信息●自动分析软件包依赖关系Yum(全称为 Yellow dog Updater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。

基于RP M包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

rpm的简单查询指令·查询已安装的rpm列表:rpm -qa|grep xxrpm包名基本格式查询返回的结果为一个rpm包名:firefox-78.6.0-1.el7.centos.x86_64名称:firefox版本号:78.6.0-1适用操作系统:el7.centos.x86_64表示centos 7.x的64位操作系统如果是i686、i386表示32位操作系统,noarch表示通用基本指令·查询yum服务器是否有需要安装的软件o yum list|grep xx 软件列表·安装指定的yum包o yum install xxx 下载安装进程的基本介绍1)在 Linux 中,每个执行的程序(代码)都称为一个进程。

每一个进程都分配一个ID 号。

(2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。

例如www 服务器。

操作系统的内核设计与实现

操作系统的内核设计与实现

操作系统的内核设计与实现操作系统是计算机系统的核心组成部分,它管理和控制着计算机硬件资源的分配和使用。

操作系统的内核是操作系统的核心部分,负责处理各种系统资源的管理和调度,如进程管理、内存管理和文件系统管理等。

本文将探讨操作系统的内核设计与实现。

一、内核的概念和作用内核是操作系统的核心,它位于操作系统的最底层。

内核负责处理硬件资源的管理和调度,为上层的应用程序提供必要的服务和接口。

内核的主要作用包括进程管理、内存管理、文件系统管理和设备驱动程序等。

1. 进程管理进程是操作系统中的最小执行单位,内核通过进程管理来控制和调度各个进程的执行。

进程管理包括创建和撤销进程、进程间的通信与同步等。

内核为每个进程分配所需的资源,如内存空间、CPU时间和文件描述符等。

2. 内存管理内存管理是操作系统中的重要部分,它负责管理和分配内存资源。

内核通过内存管理来管理进程的地址空间,包括内存的分配和回收,内存的保护和共享等。

内存管理还包括虚拟内存管理,通过将内存分为虚拟内存和物理内存,提供了更大的地址空间和更高的内存利用率。

3. 文件系统管理文件系统管理是操作系统中的重要组成部分,它负责管理文件和目录的创建、读取、写入和删除等操作。

内核通过文件系统管理来提供对文件系统的访问和操作。

文件系统管理还包括权限控制、文件锁定和文件备份等功能。

4. 设备驱动程序设备驱动程序是操作系统中的重要组成部分,它负责管理和控制各种硬件设备。

内核提供了设备驱动程序的接口,使得应用程序可以通过内核来访问硬件设备。

设备驱动程序包括对输入设备和输出设备的管理和控制,如键盘、鼠标、显示器和打印机等。

二、内核的设计原则内核的设计需要遵循一些基本原则,以保证其稳定性、可靠性和性能。

1. 简洁性内核应该尽可能简洁,避免过多的复杂功能。

简洁的内核既易于理解和维护,又提高了系统的性能。

过多的复杂功能容易引入错误和漏洞,降低了系统的稳定性和可靠性。

2. 可扩展性内核应该具备良好的可扩展性,能够支持新的硬件设备和功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

期末课程作业课程名称:操作系统内核与设计原理作业题目: Linux平台下基于C的贪吃蛇游戏开发学院:软件工程学院专业:软件工程姓名:学号:2015年06 月24日一、选题意义随着经济的快速发展,人们生活的步调日益加快,计算机的地位在人们的生活中已日益突出,基于各种操作系统的娱乐游戏也越来越多、越来越大众化,成为人们生活中必不可少的一部分。

在当前环境下,Linux挟其价格低廉、品质良好与稳定的竞争优势,正无形无影地吸引众多以PC为主工作平台上的人们。

因此基于Linux的休闲小游戏也应运而生,贪食蛇就是其中一种。

基于Linux平台下的贪食蛇游戏采用Linux下的C语言,简单易行,操作方便,娱乐性较强,吸引了很多玩家。

这一款游戏紧紧地抓住了人们的心理,虽然简单,却起乐无穷。

贪食蛇游戏操作简单方便,老少皆宜,是一款不错的小游戏, 该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具。

二、主要工作内容通过对贪吃蛇游戏算法的研究,实现了贪吃蛇基本游戏功能。

该游戏可以让用户进行简单、刺激的娱乐活动,玩家可以通过键盘的上下左右按键,控制贪吃蛇的移动方向,完成吃食物的任务。

此外,在用户有事情要中断游戏的时候,可以按空格键暂停游戏,并存档,等待下一次游戏,用户还可以对自己游戏的得分排名进行查看,增加了游戏的趣味性。

主要工作内容有:1)通过随机函数产生随机数,控制游戏过程食物的出现:2)定义键盘操作,控制游戏过程蛇的移动方向:3)画出边界,并判断游戏是否结束:4)统计游戏过程中蛇吃的食物数量,计算并输出游戏成绩。

三、技术路线(或解决问题思路)贪吃蛇游戏的设计,第一步想到的当然是画出贪吃蛇,从而可以想到定义一个“蛇”的结构体的类型,这个结构体中包括:蛇的坐标,蛇的长度,蛇运动的方向,蛇的生命。

而蛇的运动可以通过两种结构来实现:数组和链表,我使用了数组来实现。

蛇的运动方向可以通过选择结构来实现控制蛇的运动方向。

蛇已经构造出来了,第二步要构造的当然是蛇要吃的食物了。

和构造蛇一样,我们同样可以通过结构体来构造食物。

这个食物的结构体中包括:食物的坐标和食物是否生成。

而食物的出现又是随机的(但是不能与蛇头与蛇身体重合),所以我们可以通过调用随机生成函数来实现这一功能。

而游戏最重要的部分就是:怎样驱动蛇的运动?我们首先可通move_snack 函数,来接收是否有键盘输入蛇运动的方向。

在没有键盘输入的情况下,蛇的运动就要通过将画蛇的数组不停地进行交换来实现的。

蛇在吃完了食物之后身体的增加是通过增加数组的长度来实现的。

在玩家游戏过程中,要进行存档和读档,用Fopen和Fwrite函数对game_data数据进行读写操作。

最后要实现的就是在玩游戏过程中的分数的增加。

当贪吃蛇吃了一个食物之后,分数就增加10,累计的分数在游戏结束后存入排行榜,并取前十位显示出来。

四、总体功能(或模块)设计游戏主要功能有:(1)进入菜单项选择要进行的项目:开始游戏,读取存档,查看排名,结束游戏;(2)用上下左右控制游戏区域内蛇的运动方向,使蛇吃到食物,并让身体变长;(3)用户可以对正在进行的游戏进行存档(按空格键存档),并可以从开始菜单中,读档继续进行游戏;(4)用户可以查看排名前十的游戏得分;(5)用户可以自行退出游戏。

游戏的模块主要有:初始化模块,画图模块,控制模块,设置模块,具体模块如下图1。

图1 游戏模块图五、详细设计(流程图)1.进入游戏:用户进入游戏查看游戏选项,选择自己要进行的项目:开始游戏,读取存档,查看得分,结束游戏。

图2 进行游戏界面流程图2.开始游戏:用户进入游戏界面,出现墙体、蛇和食物,用户通过上下左右按键控制蛇的运动方向,当蛇吃到食物时候,蛇身体变长,然后食物重新随机出现,直到蛇碰到自己的身体或者墙体的时候游戏结束。

图3 游戏流程图3.游戏存档:在用户玩游戏过程中可以进行存档操作。

当用户想执行存档操作时,只要按下空格键就可以暂停游戏,将当前界面的游戏保存,或者再按一次空格键,恢复游戏。

图4 游戏存档图流程图4.读取存档:进入菜单界面,选择读取存档。

用户根据存档进入游戏,继续游戏。

图5 读取存档流程图5.查看排名:进入菜单界面,选择排行榜,查看排行情况。

图6 查看排名流程图六、代码(必须有注释)代码构成如下图:图7 代码截图6.1 Snack.c 的代码#include "sys.h"#include "vt.h"#include "snack.h"#include "sys.c"#inclue "vt.c"int main(void){int quit = 0;while(!quit){system("stty -echo -icanon"); //取消回显和缓存;hide_cur(); //隐藏光标;clr_scrn(); //清屏;game_box(); //画边框;goto_xy(6,33); //移动光标位置;putstr(31,1," HAVE FUN SNACK"); //输出字符串;goto_xy(8,33);putstr(31,1," 1. 新游戏");goto_xy(9,33);putstr(31,1," 2. 读取存档");goto_xy(10,33);putstr(31,1," 3. 排行榜");goto_xy(11,33);putstr(31,1," 4. 退出游戏");fflush(stdout);int back = 0;while(!back){int ret;char key = '0';int i;key = get_key(); //获取按键switch(key){case 49: // 1 选项game_init_game(); // 初始化游戏环境game_init_data(); // 初始化游戏数据game_key(); // 调用游戏按键函数back = 1; // 退出标志break;case 50: // 2 选项ret = load_data(); // 加载游戏存档goto_xy(7,62);if(ret == 0)putstr(8,5," load_success!");game_init_game();game_key();back = 1;break;case 51: //3 选项排行榜clr_scrn();goto_xy(1,33);putstr(31,1," num. GRADE");for(i = 1; i < 11; i++){goto_xy(i * 2,33);printf("\033[%d;%dm %d.%d\033[0m",31,1,i, g.max_grade[i - 1]);}getchar();back = 1;break;case 52: // 4 选项退出游戏quit = 1;back = 1;break;default:;}}}game_end(); // 游戏结束函数return 0;}void game_init_game(void) // 初始化游戏环境{srand(time(NULL)); // 设置随机数种子signal(SIGALRM,func_hander); // 注册定时信号game_timer(400); // 设置定时时间system("stty -echo -icanon"); // 取消回显和缓存hide_cur(); // 隐藏光标}void game_init_data(void){g.count = 2; //初始化蛇的节数g.head.x = 10; //初始化蛇头位置g.head.y = 20;g.body[0].x = 10; //初始化蛇身位置g.body[0].y = 19;g.body[1].x = 10;g.body[1].y = 18;g.body[2].x = 10;g.body[2].y = 17;//g.dir.x = 0;//g.dir.y = 1;g.fkey = 'r'; //方向标志位g.dir.f = RIGHT; //初始化蛇的行动方向g.level = 0; //初始化等级g.speed = 401; //初始化速度即定时器刷新时间g.grade = 0; //初始化分数game_food(); //随机食物位置}int game_end(void) //退出游戏函数{goto_xy(ROW + 3,1);system("stty echo icanon"); //设置回回显和缓存show_cur(); //显示光标exit(0); //退出函数}int game_key(void) //游戏按键控制函数{int quit = 0;int flag = 1;int ret;while(!quit){char key;key = get_key();switch(key){case SPACE: //按space 暂停并存档即关闭定时器if(flag){game_timer(0);ret = save_data();goto_xy(8,5);if(ret == 0)printf("save success!\n");}else // 再按space 取消暂停即开启定时器{game_timer(g.speed);}flag = !flag;break;case ESC: // esc 退出游戏按键game_grade_cmp();game_timer(0);quit = 1;break;case UP: // 向上g.dir.f = UP;break;case DOWN: //向下g.dir.f = DOWN;break;case RIGHT: //向左g.dir.f = RIGHT;break;case LEFT: //向右g.dir.f = LEFT;break;default:break;}}return 0;}void game_box() //画边框函数{clr_scrn();draw_box(1,20,ROW,COL,44,34,'#');}void game_snack(void) // 画蛇函数{int i;draw_rect(g.head.x,g.head.y + 20 ,1,1,43,33,'x');for(i = 0; i <= g.count - 1; i++){draw_rect(g.body[i].x,g.body[i].y + 20,1,1,3,32,'@');}}void move_snack(void) //移动蛇函数{int i;if(g.head.x <= 1 || g.head.x >= ROW + 1 || g.head.y <= 0 || g.head.y >= COL)//蛇头撞墙游戏结束{life_end();game_end();}for(i = 0;i < g.count;i++){if(g.head.x == g.body[i].x && g.head.y == g.body[i].y) //蛇撞到身体游戏结束{life_end();game_end();}}if(g.head.x == g.food.x && g.head.y == g.food.y) //蛇头撞到食物{game_food();g.count++; //节数加一g.grade += 10; //分数加十g.level = g.grade / 50; //五十分等级加一g.speed = 401 - g.level * 20; //一级减20 msgame_timer(g.speed); //重新设置定时时间改变速度}for(i = g.count - 1; i > 0; i--){g.body[i].x = g.body[i - 1].x; // 身体自动移动g.body[i].y = g.body[i - 1].y;}g.body[0].x = g.head.x;g.body[0].y = g.head.y;switch(g.dir.f) //根据按键控制蛇头移动方向{case UP:if(g.fkey != 'd') // g.fkey 防止蛇头往回走{g.head.x -= 1;g.fkey = 'u';}else{g.head.x += 1;}case DOWN:if(g.fkey != 'u'){g.head.x += 1;g.fkey = 'd';}else{g.head.x -= 1;}break;case RIGHT:if(g.fkey != 'l'){g.head.y += 1;g.fkey = 'r';}else{g.head.y -= 1;}break;case LEFT:if(g.fkey != 'r'){g.head.y -= 1;g.fkey = 'l';}else{g.head.y += 1;}default:break;}}void game_food(void) //随机食物位置的函数{int i;int flag = 0;while(1){g.food.x = (rand() % (ROW - 2)) + 2;g.food.y = (rand() % (COL - 2)) + 2;if(g.food.x != g.head.x && g.food.y != g.head.y) //食物不与蛇头重合for(i = 0;i < g.count;i++) //食物不与身体重合{if(g.food.x != g.body[i].x && g.food.y != g.body[i].y )flag = 1;}if(flag){break;}continue;}}void func_hander(int sig) //定时器时间到调用此函数刷新屏幕{game_box();draw_rect(g.food.x, g.food.y + 20, 1, 1, 46,36,'#' );move_snack();game_snack();goto_xy(5,5);printf("分数:%d",g.grade);goto_xy(6,5);printf("等级:%d",g.level);goto_xy(7,5);printf("最高分:%d",g.max_grade[0]);fflush(stdout);}int save_data(void) //存档函数{FILE * fp = NULL;fp = fopen("game_data","w");fwrite(&g,sizeof(game_t),1,fp);fclose(fp);return (0);}int load_data(void) //读档函数{FILE * fp = NULL;fp = fopen("game_data","r");fread(&g,sizeof(game_t),1,fp);fclose(fp);return 0;}void game_grade_cmp(void) //改变排行函数{int i, j;for(i = 0; i < 10; i++){if(g.grade > g.max_grade[i]){for(j = 9;j > i;j--){g.max_grade[j] = g.max_grade[j - 1];}g.max_grade[i] = g.grade;break;}}}int life_end(void) //生命结束函数{game_timer(0);goto_xy(10,31);putstr(33,1," GAME OVER!");goto_xy(11,31);printf("\033[33m GRADE: %d\033[0m\n",g.grade);game_grade_cmp();getchar();return 0;}6.2 sys.c代码#include"sys.h"// 定时器函数tim_ms 设置的定时毫秒数void game_timer(int tim_ms){struct itimerval time;time.it__sec = tim_ms / 1000;time.it__usec = tim_ms % 1000 * 1000;time.it__sec = tim_ms / 1000;time.it__usec = tim_ms % 1000 * 1000;setitimer(ITIMER_REAL,&time,NULL);}// 按键函数char get_key(void){int n;char buf[3];n = read(0,buf,sizeof(buf));if(3 == n && buf[0] == 27 && buf[1] == 91){return buf[2];}else if(1 == n){return buf[0];}return 0;}6.3 vt.c 代码#include<stdio.h>// 设置光标位置void goto_xy(int x, int y){printf("\033[%d;%dH",x,y);}// 打印前景色为fcolor 背景色为bcolor 的字符chvoid putch(int fcolor, int bcolor, char ch){printf("\033[%dm\033[%dm%c\033[0m",fcolor,bcolor,ch);}// 打印前景色为fcolor 背景色为bcolor 的字符串strvoid putstr(int fcolor, int bcolor, const char *str){printf("\033[%dm\033[%dm%s\033[0m",fcolor,bcolor,str); }// 清屏void clr_scrn(void){printf("\033[2J");}// 隐藏光标void hide_cur(void){printf("\033[?25l");}//显示光标void show_cur(void){printf("\033[?25h");}//保存光标void store_cur(void){printf("\033[s");}//加载光标void load_cur(void){printf("\033[u");}//画一个盒子void draw_box(int x, int y, int row, int col, int fcolor,int bcolor, char ch){ int i, j;for(i = 0;i <= row; i++)for(j = 0; j <= col; j++){if(i == 0 || i == row|| j == 0 || j == col)printf("\033[%d;%dH\033[%d;%dm%c\033[0m\n",i + x,j + y,fcolor,bcolor,ch);elseprintf("\033[%d;%dH%c",i + x,j + y,' ');}}//画一个方块void draw_re ct(int x, int y, int row, int col, int fcolor,int bcolor, char ch){int i, j;for(i = 0; i < row; i++)for(j = 0; j < col; j++){printf("\033[%d;%dH\033[%d;%dm%c\033[0m\n",i + x,j + y,fcolor,bcolor,ch);}}七、编译过程及编译结果(最好有截图)图8 编译截图图9 运行截图八、运行或测试结果(要求有截图)1.开始菜单界面图10 开始菜单界面2游戏运行界面图11 游戏运行界面(显示蛇和食物)3.存档界面图12 存档界面(显示Save success!)4.查看排行榜界面图13 排行榜界面(只玩了四次的截图)5.游戏结束界面图14 游戏结束界面九、参考文献[1]吴岳编著,LINUX C程序设计大全[M].清华大学出版社,2009.[2]Robert, L. Linux内核设计与实现 [M]. 北京:机械工业出版社,2011.[3]孟庆昌编著,操作系统教程 - Linux实例分析[M].西安电子科技大学出版社,2004.[4]孙种秀编著,操作系统教程(第四版)[M].高等教育出版社,2008.[5]谭浩强,C程序设计(第三版)[M].清华大学出版社,2005.[6]严蔚敏,吴伟明编著,数据结构(C语言版)[M].清华大学出版社,2007.[7]浦滨编著,C游戏编程从入门到精通(第二版)[M].科学出版社,2006.十、工作小结由于本科阶段没有接触过有关内核的知识,对于Linux的相关知识储备还很欠缺,因此本游戏设计还存在着许多的不足,例如:游戏界面还不美观,游戏的丰富性还不够。

相关文档
最新文档