首页

> 期刊论文知识库

首页 期刊论文知识库 问题

毕业论文五子棋课程设计

发布时间:

毕业论文五子棋课程设计

可以的!之所以叫BP网络,是因为使用了反向传递算法,这是一种结果导向的自学习方法,用在五子棋上是可以的。因为五子棋的游戏方法正是很明显的结果导向的过程。简单说这么个过程:1.设置输入和输出类型,比如都是坐标[x1,y1]、[x2,y2]...2.训练:你告诉网络A情况下应该输出A1B情况下应该输出B1C情况下应该输出C1...A+B情况下应该输出AB13.测试:你问网络A+B+C情况下,应该输出多少?在哪里下子(就是[x,y]是多少?)网络就根据前面BP训练的结果自动算出你要的坐标。用Matlab神经网络工具箱做吧,不是很难。另外,五子棋的棋盘别太大了,训练难度和时间是随棋盘大小成级数增长的。

机器博弈是人工智能领域的重要分支,它的研究对象多以复杂的棋牌类智力游戏为主,已经得到解决的棋类游戏,几乎全部都应归功于机器博弈近半个世纪的发展。计算机解决问题的优势在于能把不易解析的问题,借助于现代计算机的运算速度优势枚举出所有的合理情形而得解;然而,博弈问题的复杂程度决定了它不能过度依赖机器的计算能力。许多待解决的或已经解决的棋类,其状态空间复杂度或博弈树复杂度量级都太过庞大,所以我们需要添加约束,并且采用合理的算法进行优化。

五子棋问题是人工智能中的一个经典问题。当今世界,AlphaGo已经执围棋之牛耳,五子棋领域却鲜少有人问津。本文根据课堂所学知识结合文献、博客,基于两种开发语言实现了一个智能对战的AI五子棋游戏平台。

本文所做工作如下:

(1) 五子棋界面实现;

(2) 智能判定棋盘走势;

(3) 改进了棋盘扫描方式;

(4) 改良了系统评分表评估方式;

(5) 实现了基于点评分表估值找出最佳落子方式。

五子棋AI问题的最大问题是如何实现智能对弈,即当人落子之后,算法如何解读当前的棋盘并且对其进行分析解读,得到电脑方的最佳落子点。其次还有一个问题是如何判断胜利,这可以作为前面棋盘局势判定的一个子问题,也可以看做是一个单独的问题,不过这个问题总体来说较为简单,所以不做详细说明。

五子棋的整体知识构建包含以下部分:

(1) 棋盘局面表示法

(2) 棋局胜利判定

(3) 棋型知识库

(4) 智能博弈流程

对于问题(1),采用数组表示法。棋盘中的各交叉点有三种状态,不妨令 0表示空(未放置棋子) ,-1 表示有黑子 ,1 表示有白子,数组表示法的基本思想是:以交叉点对应的数组索引值来表达物理位置 ,以交叉点对应的元素值表达状态(空、 黑子、 白子)。令 V = {0 ,1 ,-1} ,棋盘 的第 i 个交叉点的状态 Si ∈V ,任何棋局都可以表示成一个 n ×n 的二元组。

对于问题(2), 采用数组表示法时,想知道任意两个元素 Si 和Sj 是否共线,要通过 i 和 j 之间的数值规律来判断。从这方面看,数组表示法是一种原始、低效的表示方法,但是对于评分表算法来说其性能损失是可以接受的。要判断是否有一方已经胜利,只需要对整个棋盘判定当前落子点的纵、横、正斜、反斜四个方向的最长延伸出四个位置看是否能连成一条同色直线即可。具体的操作可以视为:从落子点出发,向两个方向延伸,如果遇到同色,那么计数器加一,遇到非同色(空白或者异色)则停止在该方向的延伸,一个计数器记下该方向上的两头的连续同色棋子数。等到四个方向都探索完毕,如果四个计数器中有一个计数器达到了5,那么即可判断出已经有五子连珠了,此局结束。

问题(3)棋型知识库主要包括各种既定的棋盘形式,有如下几种:

² 活四 :有两个连五点(即有两个点可以形成五),图中白点即为连五点。当活四出现的时候,整个局势已经无法阻止连五了,活四的归属方一定能取得胜利;

² 冲四 :有一个连五点,如下面三图,均为冲四棋型。图中白点为连五点。 相对比活四来说,冲四的威胁性就小了很多,因为这个时候,只要跟着防守在那个唯一的连五点上,冲四就没法形成连五。

² 活三 :可以形成活四的三,如下图,代表两种最基本的活三棋型。图中白点为活四点。活三棋型是进攻中最常见的一种,因为活三之后,如果对方不以理会,将可以下一手将活三变成活四,而活四是无法防守的。所以,面对活三的时候,需要非常谨慎对待。在没有更好的进攻手段的情况下,必须对其进行防守,以防止其形成可怕的活四棋型。

² 眠三: 只能够形成冲四的三,如下各图,分别代表最基础的六种眠三形状。图中白点代表冲四点。眠三的棋型与活三的棋型相比,危险系数下降不少,因为眠三棋型即使不去防守,下一手它也只能形成冲四,而对于单纯的冲四棋型,是可以很简单的防守住的。

² 活二 :能够形成活三的二,如下图,是三种基本的活二棋型。图中白点为活三点。

² 眠二 :能够形成眠三的二。图中四个为最基本的眠二棋型,细心且喜欢思考的同学会根据眠三介绍中的图2-13找到与下列四个基本眠二棋型都不一样的眠二。图中白点为眠三点。

对于上述的棋型,我们主要考虑的是活四、冲四、活三、眠三这几种主要的进攻棋型的防守与构成,整体棋型遵从以下原则:优先考虑数目,同等数目的情况下考虑是活是眠。评分表算法的设计整体偏向于防守。

对于问题(4),当下棋型的评估分析,算法严格遵从以下流程:

当人类方落下一子,算法启动,扫描全局,得到人类棋子的集合和电脑棋子的集合。全局扫描之后,对当前局势进行排序、计算。对每个集合的每个空白点位置打分,打分依据是根据这个点周围四个方向上的同色连续棋子的数量。按照这些最后得到的评分,得出最大值。得到人类方和电脑方的两个最大值之后,进行比较,如果人类方局势较好(分数较高),则算法将下一次落子位置设置为人类方得分最高的点,尽力降低人类方的下一步得分;如果电脑方的分数较高,那么则直接在使得分数最高的点落子即可。

本次课程设计,一共设计了两个版本,一个Java版本,为19X19的棋盘,配备简单的消息提示,基于AWT实现GUI,开发工具IntelliJ IDEA

另一个版本是使用Python设计,核心算法相同,但是受限于图片源文件,为15X15棋盘,基于pygame实现GUI,开发工具是:JetBrains PyCharm x64

因为近期时间较为紧迫,所以《人工智能》这门课我选择了较为简单的五子棋问题进行课程设计。在本次课程设计中,我的编码能力、调试能力、算法解读实现能力、函数优化能力等各方面有了长足的进步。在本次的设计过程中也出现了几个问题,下面对这些问题进行一个简单的描述:

(1) 对棋盘局势的判断力不够,因为只是简单的对当前的棋盘局势进行判断,基本等同于一个粗通规则而且天赋不高的五子棋选手。如果对手很细心,而且熟练经营各种布局策略,那么基本这个算法就会被钻研出习惯,从而被轻易针对,而且针对方案百试不爽;

(2) 判断棋局形式的时候对边界的评分算法跟中心区域的评分算法一致,无法有效提前识别边界,降低边界空白点的权重;

(3) 用户图形界面需要改进,另外可以增设PK模式以及选色、选择棋盘大小功能等;

后续可以尝试用博弈树算法尝试与当前算法进行比较。评分表算法牺牲了更高的精度,以求迅速的得出最佳落子点;而博弈树可以通过提前落子进行全局预判进行更全方位的对人类方的围追堵截。

另外,可以通过在课堂上学到的知识,比如BFS、DFS、A*算法、决策树算法 等应用于五子棋的智能决策中。

《人工智能》这门课让我对于图、知识表示、智能决策等各个方面有了更好地认识与体验,课堂设计内容充实有趣,让我受益匪浅,希望今后可以更加深入这个方面,并且将课堂上学到的知识应用于实践之中。

《问檤 外传》不错

分条写:课题做到突出中心思想,条理清晰,结构合理,观点正确,具有较好的连续性等。完成相关的XXXX。

第一步:课题适应的岗位名称;

第二部:课题背景;

第三步,报告(设计、论文等)要求;然后,具体要求;

最后,主要参考文献的范围。

扩展资料:

1、论文题目,有的含副标题。题目之下是作者署名,署名之前或下边一行写作者的校、院、系、年级。

2、“摘要”与“关键词”(或称“内容提要”),一般为300字左右。位于作者署名之后,正文之前。关键词,结合标题和正文内容一般选取3至5个。

3、引论。用“O”标示,常写作“引言”、“引论”、“绪论”,引言较短时可不标出“O。引言”类小标题。引论的内容一般是交代选题背景。

主要有:课题来源,本课题在国内外的研究进展状况。已有的研究成果,存在的问题。选题的意义,讨论的问题。本文分几部分,从哪些方面进行讨论,以及指导思想、论证方法等,均可根据内容的需要写在引论中。

五子棋游戏设计毕业论文

五子棋的AI构想 有句话叫“当局者迷,旁观者清。”,但这句话在由AI所控制的计算机玩家上是不成立的,因为计算机必须知道有那些获胜方式,并计算出每下一步棋到棋盘上任一格子的获胜几率,也就是说,一个完整的五子棋的AI构想必须: 1、能够知道所有的获胜组合; 2、建立和使用获胜表; 3、设定获胜的分数; 4、使电脑具有攻击和防守的能力; 一、求五子棋的获胜组合 在一场五子棋的游戏中,计算机必须要知道有那些的获胜组合,因此我们必须求得获胜组合的总数。我们假定当前的棋盘为10*10。 (1)计算水平方向的获胜组合数,每一列的获胜组合是:6,共10列,所以水平方向的获胜组合数为:6*10=60 (2)计算垂直方向的获胜组合总数,每一行的获胜组合是:6,共10行,则垂直方向的获胜组合数为:6*10=60 (3)计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36 (4)计算反对角线方向的获胜组合总数,反对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36 ,这样所有的获胜组合数为:60+60+36+36=192 二、建立和使用获胜表 我们已经计算出了一个10*10的五子棋盘会有192种获胜方式,这样我们可以利用数组建立获胜表,获胜表的主要作用是:1,判断当前的获胜方式是否有效;2,判断当前的获胜方式中到底有多少子落入该获胜组合中。详细的使用您将在后面的程序中可以看出。 三,分数的设定 在游戏中为了让计算机能够决定下一步最佳的走法,必须先计算出计算机下到棋盘上任一空格的分数,而其中最高分数便是计算机下一步的最佳走法。 原理:我们判定当前讨论的空格与当前讨论的点有几种获胜的方式,有几种该空格就加几分。这种原理初听起来似乎是无法入手,没关系,当您了解我们后面的程序后您就会明白这种决策原理了。 这种决策有一些缺陷,因为如果只根据这个模型设计,就有可能出现电脑或玩家有三个子连成一线的时候,计算机却判断不出,它认为其他某些空格是当前的获胜的最佳位置而不去攻击或防守。没关系我们完全可以通过一个加强算法来改变当前的分值情况,也就是说当电脑或玩家有三个子或四个子连成一线时,我们通过加强算法将当前与三个子或四个子有关的空格的分值提高,从而可以弥补这一缺憾。 四、攻击与防守 以上的方式,事实上计算机只是计算出了最佳的攻击位置,为了防守我们还应计算当前玩家的最佳的攻击位置。这样有什么用呢?道理很简单,如果玩家最佳攻击位置的分数大于计算机最佳攻击位置上的分数,那么计算机就将下一步的棋子摆在玩家的最佳攻击位上以阻止玩家的进攻,否则计算机便将棋子下在自己的最佳攻击位置上进行攻击。 事实上,这个AI构想是很强大的如果你不是很厉害的五子棋高手的话,可能很快会被计算机打败。我在联众上可是中级棋手啊,跟这种构想打的时候胜率也不是很高。 使用编写五子棋 一、编写前的准备: 1、用计算机的思想描述整个下棋的过程 考虑步骤: (1)为了简便我们可以先让电脑先走第一步棋,电脑每走一步就会封掉许多玩家的获胜可能情况。 (2)当玩家走棋的时候我们首先应该考虑玩家走棋的合法性。 (3)如果合法,那么玩家也会封掉许多电脑的获胜的可能情况。 (4)电脑的思考路径:首先判断当前玩家和电脑的所有获胜组合是否需要进行加强赋值, 是进行加强赋值,否则进行普通的赋值。 (5)比较当前玩家和电脑谁的分值最大。将分值最大的点作为电脑的下一步走法。 2、利用窗体和图形工具建立五子棋的棋盘界面 (1)添加一个picturebox控件 作用:使用picturebox控件绘制棋子和棋盘 (2)添加一个label控件 作用:显示当前的获胜标志,也就是当某一方获胜或和棋时显示此标签。 (3)添加一个mainmenu控件 作用:控制游戏的开始或结束 (4)添加一个mediaplay组件 作用:使程序可以播放音乐。 3、设置整体框价 我们采取10*10的棋盘,为主要的平台。利用数组定义整个棋盘桌面,利用数组定义获胜组合以及获胜标志等。 二,声明全局数组和变量 定义虚拟桌面: Dim table(9, 9) As Integer 定义当前玩家桌面空格的分数: Dim pscore(9, 9) As Integer 定义当前电脑桌面空格的分数: Dim cscore(9, 9) As Integer 定义玩家的获胜组合: Dim pwin(9, 9, 191) As Boolean 定义电脑的获胜组合: Dim cwin(9, 9, 191) As Boolean 定义玩家的获胜组合标志: Dim pflag(191) As Boolean 定义电脑的获胜组合标志: Dim cflag(191) As Boolean 定义游戏有效标志: Dim theplayflag As Boolean 三、初始化游戏 '***************************************************************************** '** 模块名称: initplayenvironment '** '** 描述: 此函数主要功能如下: '** 1. 设置背景音乐。 '** 2. 设置游戏状态有效。 '** 3. 初始化游戏状态标签。 '** 4. 直接指定电脑的第一步走法。 '** 5. 初始化基本得分桌面。 '** 6. 电脑和玩家获胜标志初始化。 '** 7. 初始化所有获胜组合。 '** 8. 重新设定玩家的获胜标志。 '** '***************************************************************************** Sub initplayenvironment() = ".\music\" () theplayflag = True '游戏有效 = False '游戏状态标签不显示 () '清空picturebox1的内容 yuandian(130, 130) '调用绘图函数绘制当前电脑先走的位置 Dim i, j, m, n As Integer For i = 0 To 9 For j = 0 To 9 table(i, j) = 0 Next Next '桌面初始化 For i = 0 To 191 pflag(i) = True cflag(i) = True Next '获胜标志初始化 table(4, 4) = 1 '由于我们设定电脑先手,并下了4,4位所以将其值设为1 ''' ******** 初始化获胜组合 ******** n = 0 For i = 0 To 9 For j = 0 To 5 For m = 0 To 4 pwin(j + m, i, n) = True cwin(j + m, i, n) = True Next n = n + 1 Next Next For i = 0 To 9 For j = 0 To 5 For m = 0 To 4 pwin(i, j + m, n) = True cwin(i, j + m, n) = True Next n = n + 1 Next Next For i = 0 To 5 For j = 0 To 5 For m = 0 To 4 pwin(j + m, i + m, n) = True cwin(j + m, i + m, n) = True Next n = n + 1 Next Next For i = 0 To 5 For j = 9 To 4 Step -1 For m = 0 To 4 pwin(j - m, i + m, n) = True cwin(j - m, i + m, n) = True Next n = n + 1 Next Next ''' ******** 初始化获胜组合结束 ******** For i = 0 To 191 If pwin(4, 4, i) = True Then pflag(i) = False End If Next '由于电脑已下了4,4位所以我们需要重新设定玩家的获胜标志 End Sub 四,处理鼠标事件 '***************************************************************************** '** 模块名称: themousedown '** '** 描述: 此函数主要实行以下功能: '** 1. 判定当前游戏标志是否有效。 '** 2. 将实际坐标转化成虚拟坐标。 '** 3. 绘制玩家的棋子。 '** 4. 执行检查获胜函数。 '** 5. 执行电脑算法函数。 '** '***************************************************************************** Sub themousedown(ByVal x As Integer, ByVal y As Integer) If theplayflag = False Then Exit Sub End If '检查游戏状态是否有效 Dim i, j As Integer Dim zhx, zhy As Integer zhx = Int((x - 10) / 30) zhy = Int((y - 10) / 30) For i = 0 To 9 For j = 0 To 9 If table(zhx, zhy) > 0 Then Exit Sub End If Next Next '检查当前鼠标点击的格子是否有效 Dim mycolor As Color Dim g As g = mycolor = Dim brush1 As = New SolidBrush(mycolor) (brush1, zhx * 30 + 10, zhy * 30 + 10, 30, 30) '绘制玩家的棋子 table(zhx, zhy) = 2 For i = 0 To 191 If cwin(zhx, zhy, i) = True Then cflag(i) = False End If Next '重设电脑的获胜标志 checkwin() '检查当前玩家是否获胜 diannao() '调用电脑算法 End Sub 五、获胜检查算法。 '***************************************************************************** '** 模块名称: checkwin '** '** 描述: 此模块执行以下功能: '** 1. 检查是否和棋。 '** 2. 检查电脑是否获胜。 '** 3. 检查玩家是否获胜。 '** '***************************************************************************** Sub checkwin() Dim i, j, k, m, n As Integer Dim ca As Integer Dim pa As Integer Dim cnormal As Integer = 0 For i = 0 To 191 If cflag(i) = False Then cnormal = cnormal + 1 End If Next If cnormal = 190 Then = True = "和棋,请重新开始!" () theplayflag = False Exit Sub End If '设定和棋规则 For i = 0 To 191 If cflag(i) = True Then ca = 0 For j = 0 To 9 For k = 0 To 9 If table(j, k) = 1 Then If cwin(j, k, i) = True Then ca = ca + 1 End If End If Next Next If ca = 5 Then = True = "电脑获胜,请重新开始" () theplayflag = False Exit Sub End If End If Next '检查电脑是否获胜 For i = 0 To 191 If pflag(i) = True Then pa = 0 For j = 0 To 9 For k = 0 To 9 If table(j, k) = 2 Then If pwin(j, k, i) = True Then pa = pa + 1 End If End If Next Next If pa = 5 Then = True = "玩家获胜,请重新开始" () theplayflag = False Exit Sub End If End If Next '检查玩家是否获胜 End Sub 六、电脑算法 '***************************************************************************** '** 模块名称: diannao '** '** 描述: 此程序主要执行以下功能: '** 1. 初始化赋值系统。 '** 2. 赋值加强算法。 '** 3. 计算电脑和玩家的最佳攻击位。 '** 4. 比较电脑和玩家的最佳攻击位并决定电脑的最佳策略。 '** 5. 执行检查获胜函数。 '** '***************************************************************************** Sub diannao() Dim i, j, k, m, n As Integer Dim dc As Integer Dim cab As Integer Dim pab As Integer For i = 0 To 9 For j = 0 To 9 pscore(i, j) = 0 cscore(i, j) = 0 Next Next '初始化赋值数组 ''' ******** 电脑加强算法 ******** For i = 0 To 191 If cflag(i) = True Then cab = 0 For j = 0 To 9 For k = 0 To 9 If table(j, k) = 1 Then If cwin(j, k, i) = True Then cab = cab + 1 End If End If Next Next Select Case cab Case 3 For m = 0 To 9 For n = 0 To 9 If table(m, n) = 0 Then If cwin(m, n, i) = True Then cscore(m, n) = cscore(m, n) + 5 End If End If Next Next Case 4 For m = 0 To 9 For n = 0 To 9 If table(m, n) = 0 Then If cwin(m, n, i) = True Then yuandian(m * 30 + 10, n * 30 + 10) table(m, n) = 1 For dc = 0 To 191 If pwin(m, n, dc) = True Then pflag(dc) = False checkwin() Exit Sub End If Next End If End If Next Next End Select End If Next For i = 0 To 191 If pflag(i) = True Then pab = 0 For j = 0 To 9 For k = 0 To 9 If table(j, k) = 2 Then If pwin(j, k, i) = True Then pab = pab + 1 End If End If Next Next Select Case pab Case 3 For m = 0 To 9 For n = 0 To 9 If table(m, n) = 0 Then If pwin(m, n, i) = True Then pscore(m, n) = pscore(m, n) + 30 End If End If Next Next Case 4 For m = 0 To 9 For n = 0 To 9 If table(m, n) = 0 Then If pwin(m, n, i) = True Then yuandian(m * 30 + 10, n * 30 + 10) table(m, n) = 1 For dc = 0 To 191 If pwin(m, n, dc) = True Then pflag(dc) = False checkwin() Exit Sub End If Next End If End If Next Next End Select End If Next ''' ******** 电脑加强算法结束 ******** ' ******** 赋值系统 ******** For i = 0 To 191 If cflag(i) = True Then For j = 0 To 9 For k = 0 To 9 If table(j, k) = 0 Then If cwin(j, k, i) = True Then For m = 0 To 9 For n = 0 To 9 If table(m, n) = 1 Then If cwin(m, n, i) = True Then cscore(j, k) = cscore(j, k) + 1 End If End If Next Next End If End If Next Next End If Next For i = 0 To 191 If pflag(i) = True Then For j = 0 To 9 For k = 0 To 9 If table(j, k) = 0 Then If pwin(j, k, i) = True Then For m = 0 To 9 For n = 0 To 9 If table(m, n) = 2 Then If pwin(m, n, i) = True Then pscore(j, k) = pscore(j, k) + 1 End If End If Next Next End If End If Next Next End If Next ''' ******** 赋值系统结束 ******** ''' ******** 分值比较算法 ******** Dim a, b, c, d As Integer Dim cs As Integer = 0 Dim ps As Integer = 0 For i = 0 To 9 For j = 0 To 9 If cscore(i, j) > cs Then cs = cscore(i, j) a = i b = j End If Next Next For i = 0 To 9 For j = 0 To 9 If pscore(i, j) > ps Then ps = pscore(i, j) c = i d = j End If Next Next If cs > ps Then yuandian(a * 30 + 10, b * 30 + 10) table(a, b) = 1 For i = 0 To 191 If pwin(a, b, i) = True Then pflag(i) = False End If Next Else yuandian(c * 30 + 10, d * 30 + 10) table(c, d) = 1 For i = 0 To 191 If pwin(c, d, i) = True Then pflag(i) = False End If Next End If ''' ******** 分值比较算法结束 ******** checkwin() End Sub 七、绘制棋子 '***************************************************************************** '** 模块名称: yuandian '** '** 描述: 此函数主要进行电脑棋子的绘制。 '** '***************************************************************************** Sub yuandian(ByVal x As Integer, ByVal y As Integer) Dim mycolor As Color Dim g As g = Dim zhx, zhy As Integer zhx = Int((x - 10) / 30) zhy = Int((y - 10) / 30) mycolor = Dim brush1 As = New SolidBrush(mycolor) (brush1, zhx * 30 + 10, zhy * 30 + 10, 30, 30) End Sub

分条写:课题做到突出中心思想,条理清晰,结构合理,观点正确,具有较好的连续性等。完成相关的XXXX。

第一步:课题适应的岗位名称;

第二部:课题背景;

第三步,报告(设计、论文等)要求;然后,具体要求;

最后,主要参考文献的范围。

扩展资料:

1、论文题目,有的含副标题。题目之下是作者署名,署名之前或下边一行写作者的校、院、系、年级。

2、“摘要”与“关键词”(或称“内容提要”),一般为300字左右。位于作者署名之后,正文之前。关键词,结合标题和正文内容一般选取3至5个。

3、引论。用“O”标示,常写作“引言”、“引论”、“绪论”,引言较短时可不标出“O。引言”类小标题。引论的内容一般是交代选题背景。

主要有:课题来源,本课题在国内外的研究进展状况。已有的研究成果,存在的问题。选题的意义,讨论的问题。本文分几部分,从哪些方面进行讨论,以及指导思想、论证方法等,均可根据内容的需要写在引论中。

还非要写手机项目?我其他项目基本都有

可以的!之所以叫BP网络,是因为使用了反向传递算法,这是一种结果导向的自学习方法,用在五子棋上是可以的。因为五子棋的游戏方法正是很明显的结果导向的过程。简单说这么个过程:1.设置输入和输出类型,比如都是坐标[x1,y1]、[x2,y2]...2.训练:你告诉网络A情况下应该输出A1B情况下应该输出B1C情况下应该输出C1...A+B情况下应该输出AB13.测试:你问网络A+B+C情况下,应该输出多少?在哪里下子(就是[x,y]是多少?)网络就根据前面BP训练的结果自动算出你要的坐标。用Matlab神经网络工具箱做吧,不是很难。另外,五子棋的棋盘别太大了,训练难度和时间是随棋盘大小成级数增长的。

五子棋毕业论文设计与实现

可以的!之所以叫BP网络,是因为使用了反向传递算法,这是一种结果导向的自学习方法,用在五子棋上是可以的。因为五子棋的游戏方法正是很明显的结果导向的过程。简单说这么个过程:1.设置输入和输出类型,比如都是坐标[x1,y1]、[x2,y2]...2.训练:你告诉网络A情况下应该输出A1B情况下应该输出B1C情况下应该输出C1...A+B情况下应该输出AB13.测试:你问网络A+B+C情况下,应该输出多少?在哪里下子(就是[x,y]是多少?)网络就根据前面BP训练的结果自动算出你要的坐标。用Matlab神经网络工具箱做吧,不是很难。另外,五子棋的棋盘别太大了,训练难度和时间是随棋盘大小成级数增长的。

分条写:课题做到突出中心思想,条理清晰,结构合理,观点正确,具有较好的连续性等。完成相关的XXXX。

第一步:课题适应的岗位名称;

第二部:课题背景;

第三步,报告(设计、论文等)要求;然后,具体要求;

最后,主要参考文献的范围。

扩展资料:

1、论文题目,有的含副标题。题目之下是作者署名,署名之前或下边一行写作者的校、院、系、年级。

2、“摘要”与“关键词”(或称“内容提要”),一般为300字左右。位于作者署名之后,正文之前。关键词,结合标题和正文内容一般选取3至5个。

3、引论。用“O”标示,常写作“引言”、“引论”、“绪论”,引言较短时可不标出“O。引言”类小标题。引论的内容一般是交代选题背景。

主要有:课题来源,本课题在国内外的研究进展状况。已有的研究成果,存在的问题。选题的意义,讨论的问题。本文分几部分,从哪些方面进行讨论,以及指导思想、论证方法等,均可根据内容的需要写在引论中。

还非要写手机项目?我其他项目基本都有

写课题任务时主要从“想借助这篇论文达到什么样的目的”入手,表明写作意图;写课题要求时主要从“写作时要注意的点”入手,表明写作的时候运用到的研究方法等方面的内容。下面举例说明:

一、毕业论文的课题任务:为JAVA在安卓手机平台设置五子棋游戏的时候提供相应的参考。

二、毕业论文的课题要求:

1、尽量结合生产、科研及技术设备的革新、技术改造等完成论文。

2、要求论文具有先进性、实用性。

3、论文选题难度适中。

扩展资料

毕业论文写作注意事项

1、毕业论文是应考者的总结性独立作业,目的在于总结学习专业的成果,培养综合运用所学知识解决实际问题的能力。从文体而言,它也是对某一专业领域的现实问题或理论问题进行科学研究探索的具有一定意义的论说文。完成毕业论文的撰写可以分两个步骤,即选择课题和研究课题。

2、选好课题后,接下来的工作就是研究课题,研究课题一般程序是:搜集资料、研究资料,明确论点和选定材料,最后是执笔撰写、修改定稿。

参考资料来源:百度百科-毕业论文

c语言五子棋毕业论文

这是WIN32

有点难度了啊

**********************************************************//* 程序中用到的库函数所在头文件应用 #include 命令包含进来 */#include <>#include <>#include <>#include <>#include <>/**********************************************************//* 定义符号常量 *//*定义画棋盘所需的制表符*/#define CROSSRU 0xbf /*右上角点*/#define CROSSLU 0xda /*左上角点*/#define CROSSLD 0xc0 /*左下角点*/#define CROSSRD 0xd9 /*右下角点*/#define CROSSL 0xc3 /*左边*/#define CROSSR 0xb4 /*右边*/#define CROSSU 0xc2 /*上边*/#define CROSSD 0xc1 /*下边*/#define CROSS 0xc5 /*十字交叉点*//*定义棋盘左上角点在屏幕上的位置*/#define MAPXOFT 5#define MAPYOFT 2/*定义1号玩家的操作键键码*/#define PLAY1UP 0x1157/*上移--'W'*/#define PLAY1DOWN 0x1f53/*下移--'S'*/#define PLAY1LEFT 0x1e41/*左移--'A'*/#define PLAY1RIGHT 0x2044/*右移--'D'*/#define PLAY1DO 0x3920/*落子--空格键*//*定义2号玩家的操作键键码*/#define PLAY2UP 0x4800/*上移--方向键up*/#define PLAY2DOWN 0x5000/*下移--方向键down*/#define PLAY2LEFT 0x4b00/*左移--方向键left*/#define PLAY2RIGHT 0x4d00/*右移--方向键right*/#define PLAY2DO 0x1c0d/*落子--回车键Enter*//*若想在游戏中途退出, 可按 Esc 键*/#define ESCAPE 0x011b/*定义棋盘上交叉点的状态, 即该点有无棋子 *//*若有棋子, 还应能指出是哪个玩家的棋子 */#define CHESSNULL 0 //没有棋子#define CHESS1 'O'//一号玩家的棋子#define CHESS2 'X'//二号玩家的棋子/*定义按键类别*/#define KEYEXIT 0/*退出键*/#define KEYFALLCHESS 1/*落子键*/#define KEYMOVECURSOR 2/*光标移动键*/#define KEYINVALID 3/*无效键*//*定义符号常量: 真, 假 --- 真为1, 假为0 */#define TRUE 1#define FALSE 0/**********************************************************//* 定义数据结构 *//*棋盘交叉点坐标的数据结构*/struct point{ int x,y;};/**********************************************************//*自定义函数原型说明 */void Init(void);int GetKey(void);int CheckKey(int press);int ChangeOrder(void);int ChessGo(int Order,struct point Cursor);void DoError(void);void DoOK(void);void DoWin(int Order);void MoveCursor(int Order,int press);void DrawCross(int x,int y);void DrawMap(void);int JudgeWin(int Order,struct point Cursor);int JudgeWinLine(int Order,struct point Cursor,int direction);void ShowOrderMsg(int Order);void EndGame(void);/**********************************************************//**********************************************************//* 定义全局变量 */int gPlayOrder; /*指示当前行棋方 */struct point gCursor; /*光标在棋盘上的位置 */char gChessBoard[19][19];/*用于记录棋盘上各点的状态*//**********************************************************//**********************************************************//*主函数*/void main(){ int press; int bOutWhile=FALSE;/*退出循环标志*/ Init();/*初始化图象,数据*/ while(1) { press=GetKey();/*获取用户的按键值*/ switch(CheckKey(press))/*判断按键类别*/ { /*是退出键*/ case KEYEXIT: clrscr();/*清屏*/ bOutWhile = TRUE; break; /*是落子键*/ case KEYFALLCHESS: if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/ DoError();/*落子错误*/ else { DoOK();/*落子正确*/ /*如果当前行棋方赢棋*/ if(JudgeWin(gPlayOrder,gCursor)==TRUE) { DoWin(gPlayOrder); bOutWhile = TRUE;/*退出循环标志置为真*/ } /*否则*/ else /*交换行棋方*/ ChangeOrder(); } break; /*是光标移动键*/ case KEYMOVECURSOR: MoveCursor(gPlayOrder,press); break; /*是无效键*/ case KEYINVALID: break; } if(bOutWhile==TRUE) break; } /*游戏结束*/ EndGame();}/**********************************************************//*界面初始化,数据初始化*/void Init(void){ int i,j; char *Msg[]= { "Player1 key:", " UP----w", " DOWN--s", " LEFT--a", " RIGHT-d", " DO----space", "", "Player2 key:", " UP----up", " DOWN--down", " LEFT--left", " RIGHT-right", " DO----ENTER", "", "exit game:", " ESC", NULL, }; /*先手方为1号玩家*/ gPlayOrder = CHESS1; /*棋盘数据清零, 即棋盘上各点开始的时候都没有棋子*/ for(i=0;i<19;i++) for(j=0;j<19;j++) gChessBoard[i][j]=CHESSNULL; /*光标初始位置*/ ; /*画棋盘*/ textmode(C40); DrawMap(); /*显示操作键说明*/ i=0; textcolor(BROWN); while(Msg[i]!=NULL) { gotoxy(25,3+i); cputs(Msg[i]); i++; } /*显示当前行棋方*/ ShowOrderMsg(gPlayOrder); /*光标移至棋盘的左上角点处*/ gotoxy();}/*画棋盘*/void DrawMap(void){ int i,j; clrscr(); for(i=0;i<19;i++) for(j=0;j<19;j++) DrawCross(i,j);}/*画棋盘上的交叉点*/void DrawCross(int x,int y){ gotoxy(x+MAPXOFT,y+MAPYOFT); /*交叉点上是一号玩家的棋子*/ if(gChessBoard[x][y]==CHESS1) { textcolor(LIGHTBLUE); putch(CHESS1); return; } /*交叉点上是二号玩家的棋子*/ if(gChessBoard[x][y]==CHESS2) { textcolor(LIGHTBLUE); putch(CHESS2); return; } textcolor(GREEN); /*左上角交叉点*/ if(x==0&&y==0) { putch(CROSSLU); return; } /*左下角交叉点*/ if(x==0&&y==18) { putch(CROSSLD); return; } /*右上角交叉点*/ if(x==18&&y==0) { putch(CROSSRU); return; } /*右下角交叉点*/ if(x==18&&y==18) { putch(CROSSRD); return; } /*左边界交叉点*/ if(x==0) { putch(CROSSL); return; } /*右边界交叉点*/ if(x==18) { putch(CROSSR); return; } /*上边界交叉点*/ if(y==0) { putch(CROSSU); return; } /*下边界交叉点*/ if(y==18) { putch(CROSSD); return; } /*棋盘中间的交叉点*/ putch(CROSS);}/*交换行棋方*/int ChangeOrder(void){ if(gPlayOrder==CHESS1) gPlayOrder=CHESS2; else gPlayOrder=CHESS1; return(gPlayOrder);}/*获取按键值*/int GetKey(void){ char lowbyte; int press; while (bioskey(1) == 0) ;/*如果用户没有按键,空循环*/ press=bioskey(0); lowbyte=press&0xff; press=press&0xff00 + toupper(lowbyte); return(press);}/*落子错误处理*/void DoError(void){ sound(1200); delay(50); nosound();}/*赢棋处理*/void DoWin(int Order){ sound(1500);delay(100); sound(0); delay(50); sound(800); delay(100); sound(0); delay(50); sound(1500);delay(100); sound(0); delay(50); sound(800); delay(100); sound(0); delay(50); nosound(); textcolor(RED+BLINK); gotoxy(25,20); if(Order==CHESS1) cputs("PLAYER1 WIN!"); else cputs("PLAYER2 WIN!"); gotoxy(25,21); cputs(" \\<^+^>/"); getch();}/*走棋*/int ChessGo(int Order,struct point Cursor){ /*判断交叉点上有无棋子*/ if(gChessBoard[][]==CHESSNULL) { /*若没有棋子, 则可以落子*/ gotoxy(); textcolor(LIGHTBLUE); putch(Order); gotoxy(); gChessBoard[][]=Order; return TRUE; } else return FALSE;}/*判断当前行棋方落子后是否赢棋*/int JudgeWin(int Order,struct point Cursor){ int i; for(i=0;i<4;i++) /*判断在指定方向上是否有连续5个行棋方的棋子*/ if(JudgeWinLine(Order,Cursor,i)) return TRUE; return FALSE;}/*判断在指定方向上是否有连续5个行棋方的棋子*/int JudgeWinLine(int Order,struct point Cursor,int direction){ int i; struct point pos,dpos; const int testnum = 5; int count; switch(direction) { case 0:/*在水平方向*/ (testnum-1); ; ; ; break; case 1:/*在垂直方向*/ ; (testnum-1); ; ; break; case 2:/*在左下至右上的斜方向*/ (testnum-1); (testnum-1); ; ; break; case 3:/*在左上至右下的斜方向*/ (testnum-1); (testnum-1); ; ; break; } count=0; for(i=0;i=0&&<=18&&>=0&&<=18) { if(gChessBoard[][]==Order) { count++; if(count>=testnum) return TRUE; } else count=0; } ; ; } return FALSE;}/*移动光标*/void MoveCursor(int Order,int press){ switch(press) { case PLAY1UP: if(Order==CHESS1&&>0) ; break; case PLAY1DOWN: if(Order==CHESS1&&<18) ; break; case PLAY1LEFT: if(Order==CHESS1&&>0) ; break; case PLAY1RIGHT: if(Order==CHESS1&&<18) ; break; case PLAY2UP: if(Order==CHESS2&&>0) ; break; case PLAY2DOWN: if(Order==CHESS2&&<18) ; break; case PLAY2LEFT: if(Order==CHESS2&&>0) ; break; case PLAY2RIGHT: if(Order==CHESS2&&<18) ; break; } gotoxy();}/*游戏结束处理*/void EndGame(void){ textmode(C80);}/*显示当前行棋方*/void ShowOrderMsg(int Order){ gotoxy(6,MAPYOFT+20); textcolor(LIGHTRED); if(Order==CHESS1) cputs("Player1 go!"); else cputs("Player2 go!"); gotoxy();}/*落子正确处理*/void DoOK(void){ sound(500); delay(70); sound(600); delay(50); sound(1000); delay(100); nosound();}/*检查用户的按键类别*/int CheckKey(int press){ if(press==ESCAPE) return KEYEXIT;/*是退出键*/ else if ( ( press==PLAY1DO && gPlayOrder==CHESS1) || ( press==PLAY2DO && gPlayOrder==CHESS2) ) return KEYFALLCHESS;/*是落子键*/ else if ( press==PLAY1UP || press==PLAY1DOWN || press==PLAY1LEFT || press==PLAY1RIGHT || press==PLAY2UP || press==PLAY2DOWN || press==PLAY2LEFT || press==PLAY2RIGHT ) return KEYMOVECURSOR;/*是光标移动键*/ else return KEYINVALID;/*按键无效*/}

//但是这些代码由于编译器的原因,在TC下仍无法运行。请使用VC。#include <>#include <>#include <>#include <>int ChessData[15][15] ={0};int GuangbiaoData[2]={8,8};int ChessStepData[255][2]={0};void gotoxy(int x, int y) //gotoxy在TC中是在一个系统自带的函数,但是在VC中没有这个函数,所以在网上找到了这个函数以实现同样的功能。//只有这一个函数是网上找的,别的全部我自己写的。{ COORD c; ; ; SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c); }void GotoChess(int x,int y){x=3*x-2;y=2*y-1;gotoxy(x,y);}void Move(int MoveData) //输入参数为用户输入的方向(1表示上,2表示下,3表示左,4表示右){switch (MoveData){case 1:GuangbiaoData[1]-=1;break;case 2:GuangbiaoData[1]+=1;break;case 3:GuangbiaoData[0]-=1;break;case 4:GuangbiaoData[0]+=1;break;default:printf("Move函数出错");}GotoChess(GuangbiaoData[0],GuangbiaoData[1]);}int Get(int *data) //该函数的功能是用户的按键,并转化为01234567(0表示输入错误,1表示上,2表示下,3表示左,4表示右,5表示落子,6表示悔棋,7表示退出。){ //并返回输入的用户号码(共同键返回3),错误则返回0int temp;B: temp=getch();if (temp==224) { temp=getch(); switch (temp) { case 72:*data=1;break; case 80:*data=2;break; case 75:*data=3;break; case 77:*data=4;break; default:goto B; } return 2;}else { switch (temp) { case 'w': case 'W':*data=1;return 1;break; case 's': case 'S':*data=2;return 1;break; case 'a': case 'A':*data=3;return 1;break; case 'd': case 'D':*data=4;return 1;break; case 13 :*data=5;return 2;break; case 32 :*data=5;return 1;break; case 8 :*data=6;break; case 27 :*data=7;break; default:*data=0 ;return 0;break; } return 3;}}void MoveToEnd(){gotoxy(1,30);}int LogicBeOut(int a,int b){if (a==-1||a==15||b==-1||b==15) return 1;else return 0;}int win(int v){int i=1,j=1,a=0,b=0;while (ChessData[a=GuangbiaoData[0]-i-1][b=GuangbiaoData[1]-i-1]==v*2&&!LogicBeOut(a,b)) i++;while (ChessData[a=GuangbiaoData[0]+j-1][b=GuangbiaoData[1]+j-1]==v*2&&!LogicBeOut(a,b)) j++;if (i+j-1>=5) return 1;i=1,j=1,a=0,b=0;while (ChessData[a=GuangbiaoData[0]+i-1][b=GuangbiaoData[1]-i-1]==v*2&&!LogicBeOut(a,b)) i++;while (ChessData[a=GuangbiaoData[0]-j-1][b=GuangbiaoData[1]+j-1]==v*2&&!LogicBeOut(a,b)) j++;if (i+j-1>=5) return 1;i=1,j=1,a=0,b=0;while (ChessData[a=GuangbiaoData[0]-i-1][b=GuangbiaoData[1]-1]==v*2&&!LogicBeOut(a,b)) i++;while (ChessData[a=GuangbiaoData[0]+j-1][b=GuangbiaoData[1]-1]==v*2&&!LogicBeOut(a,b)) j++;if (i+j-1>=5) return 1;i=1,j=1,a=0,b=0;while (ChessData[a=GuangbiaoData[0]-1][b=GuangbiaoData[1]-i-1]==v*2&&!LogicBeOut(a,b)) i++;while (ChessData[a=GuangbiaoData[0]-1][b=GuangbiaoData[1]+j-1]==v*2&&!LogicBeOut(a,b)) j++;if (i+j-1>=5) return 1;return 0;}void NewShow() //新棋局的开始{int i,j;for (i=0;i<15;i++) for (j=0;j<15;j++) ChessData[i][j]=0;system("cls");for (i=1;i<=29;i++){ for (j=1;j<=43;j++) if(i%2==1) printf("-"); else if (j%3==1) printf("|"); else printf(" "); printf("\n");}GuangbiaoData[0]=8;GuangbiaoData[1]=8;MoveToEnd();printf("现在请用户1下棋 \n");printf("用户1使用 w,s,a,d移动光标,空格键落子\n");printf("用户2使用各方向键移动光标,回车键落子\n");printf("按下Backspace键悔棋,按下esc返回主菜单\n");GotoChess(8,8);}int BeOut(int data){int Xiuzheng[2],New[2];switch (data){case 1:Xiuzheng[0]=0;Xiuzheng[1]=-1 ;break;case 2:Xiuzheng[0]=0;Xiuzheng[1]=1;break;case 3:Xiuzheng[0]=-1;Xiuzheng[1]=0;break;case 4:Xiuzheng[0]=1;Xiuzheng[1]=0 ;break;case 5:Xiuzheng[0]=0;Xiuzheng[1]=0 ;break;default:printf("BeOut函数出错");}New[0]=GuangbiaoData[0]+Xiuzheng[0];New[1]=GuangbiaoData[1]+Xiuzheng[1];if (New[0]>15||New[0]<1||New[1]>15||New[1]<1) return 1;else return 0; }void UserChoose(int * choice){ system("cls");printf("________________________________________________________________________________");printf("________________________________________________________________________________");printf(" $1.单人游戏 ");printf(" 2.双人游戏 ");printf(" 3.退出游戏 ");printf(" 4.游戏帮助 ");printf("________________________________________________________________________________");printf("________________________________________________________________________________");printf(" ");printf(" 开心五子棋 ");printf(" ");printf(" 出品人:张云聪 ");printf(" 学号:067108034 ");printf(" 指导老师:邵艳玲 ");printf(" ");printf(" ");printf(" 温馨提示,游戏时请把窗口最大化,以达到最佳效果 ");printf("________________________________________________________________________________");int temp=0,i=0;do{ if ((temp=getch())==224) { temp=getch(); if (temp==72&&i!=0) { gotoxy(34,3+i); printf(" "); i--; gotoxy(34,3+i); printf("$"); gotoxy(0,0); } else if(temp==80&&i!=3) { gotoxy(34,3+i); printf(" "); i++; gotoxy(34,3+i); printf("$"); gotoxy(0,0); } } else if (temp==13) {*choice=i+1;return;} else if (temp==27) {*choice=3;return;} else if (temp=='1'||temp=='2'||temp=='3'||temp=='4') {*choice=temp-48;return;}}while(1);}int CannotDo(int v1,int v2,int MoveData,int choice) //第一个输入值为按键的用户号,第二个是本应该按键的用户号,第三个为按下键的对应值,第四个键代表游戏模式。{if (v1==3) return 0; //如果用户输入的为共用按键,则CannotDo为假else if (v1==0) return 1;//如果用户输入错误,则CannotDo为真else if (v1!=v2&&choice==2) return 1; //如果不该此用户输入,而用户进行了输入,则CannotDo为真if (BeOut(MoveData)) return 1; //如果移动出边界则CannotDo为真return 0;}int CannotLuozi() //判断是否可以落子。{if (ChessData[GuangbiaoData[0]-1][GuangbiaoData[1]-1]) return 1;else return 0;}int luozi(int v) //玩家v落子。{ ChessData[GuangbiaoData[0]-1][GuangbiaoData[1]-1]+=v*2;if (v==1) printf("O");else if (v==2) printf("X");else printf("luozi函数出错");if (win(v)) {MoveToEnd();printf("玩家%d获得了胜利! \n",v);for (int i=1;i<=240;i++) printf(" ");GotoChess(GuangbiaoData[0],GuangbiaoData[1]);getch();return 1;}MoveToEnd();printf("现在请用户%d下棋 ",v%2+1);GotoChess(GuangbiaoData[0],GuangbiaoData[1]);return 0;}void HuiQi(int step) //输入的是当前的要悔的棋是第几步{GuangbiaoData[0]=ChessStepData[step-1][0];GuangbiaoData[1]=ChessStepData[step-1][1];ChessData[GuangbiaoData[0]-1][GuangbiaoData[1]-1]=0;GotoChess(GuangbiaoData[0],GuangbiaoData[1]);printf("-");MoveToEnd();printf("现在请用户%d下棋 ",(step+1)%2+1);GotoChess(GuangbiaoData[0],GuangbiaoData[1]);}int DataGetAndChoose(int choice) { int MoveData=0,i=0,temp; //MoveData 0表示不可移动,1表示上,2表示下,3表示左,4表示右,5表示落子,6表示悔棋,7表示退出。while(1){loop: while (temp=Get(&MoveData),CannotDo(temp,i%2+1,MoveData,choice)); switch (MoveData) { case 1: case 2: case 3: case 4:Move(MoveData);break; case 7:return 0; case 6: if (i==0) {MoveToEnd();printf("现在无法悔棋 ");GotoChess(GuangbiaoData[0],GuangbiaoData[1]);} else HuiQi(i--); break; case 5: if (CannotLuozi()) goto loop; if(luozi(i%2+1)) return 0; ChessStepData[i][0]=GuangbiaoData[0]; ChessStepData[i][1]=GuangbiaoData[1]; i++; break; default:printf("DataGetAndChoose函数出错");break; }}return 1; }void ShowHelp(){system("cls");printf("********************************************************************************");printf("********************************************************************************");printf("****** 单人游戏供用户一个人自己与自己下棋研究棋局之用 ******");printf("****** 双人游戏中,用户1使用wsad控制方向,按空格落子 ******");printf("****** 用户2按方向键控制方向,回车键落子 ******");printf("****** 游戏过程中按esc返回主菜单 ******");printf("****** 游戏过程中退格键悔棋 ******");printf("****** 双人模式中某人下棋时,另一个用户无法控制光标与落子 ******");printf("****** ******"); printf("****** 帮助 ******"); printf("****** 按任意键返回 ******"); printf("********************************************************************************"); printf("********************************************************************************");getch();}int main(){int choice=0;system("color 2b");choose: UserChoose(&choice);if (choice<1||choice>4) goto choose;if (choice==3) {gotoxy(1,18);
printf("\n谢谢您的使用,再见 "); getch();return 0;}if (choice==4) {ShowHelp(); goto choose;}NewShow();DataGetAndChoose(choice);main();return 0;}

五子棋论文的研究目的

写课题任务时主要从“想借助这篇论文达到什么样的目的”入手,表明写作意图;写课题要求时主要从“写作时要注意的点”入手,表明写作的时候运用到的研究方法等方面的内容。下面举例说明:

一、毕业论文的课题任务:为JAVA在安卓手机平台设置五子棋游戏的时候提供相应的参考。

二、毕业论文的课题要求:

1、尽量结合生产、科研及技术设备的革新、技术改造等完成论文。

2、要求论文具有先进性、实用性。

3、论文选题难度适中。

扩展资料

毕业论文写作注意事项

1、毕业论文是应考者的总结性独立作业,目的在于总结学习专业的成果,培养综合运用所学知识解决实际问题的能力。从文体而言,它也是对某一专业领域的现实问题或理论问题进行科学研究探索的具有一定意义的论说文。完成毕业论文的撰写可以分两个步骤,即选择课题和研究课题。

2、选好课题后,接下来的工作就是研究课题,研究课题一般程序是:搜集资料、研究资料,明确论点和选定材料,最后是执笔撰写、修改定稿。

参考资料来源:百度百科-毕业论文

你这篇中国知网也好,万方数据也好都有例子!甚至百度文库都有!英文原文最好用谷歌学术搜索!==================论文写作方法===========================论文网上没有免费的,与其花人民币,还不如自己写,万一碰到人的,就不上算了。写作论文的简单方法,首先大概确定自己的选题,然后在网上查找几份类似的文章,通读一遍,对这方面的内容有个大概的了解!参照论文的格式,列出提纲,补充内容,实在不会,把这几份论文综合一下,从每篇论文上复制一部分,组成一篇新的文章!然后把按自己的语言把每一部分换下句式或词,经过换词不换意的办法处理后,网上就查不到了,祝你顺利完成论文!

分条写:课题做到突出中心思想,条理清晰,结构合理,观点正确,具有较好的连续性等。完成相关的XXXX。

第一步:课题适应的岗位名称;

第二部:课题背景;

第三步,报告(设计、论文等)要求;然后,具体要求;

最后,主要参考文献的范围。

扩展资料:

1、论文题目,有的含副标题。题目之下是作者署名,署名之前或下边一行写作者的校、院、系、年级。

2、“摘要”与“关键词”(或称“内容提要”),一般为300字左右。位于作者署名之后,正文之前。关键词,结合标题和正文内容一般选取3至5个。

3、引论。用“O”标示,常写作“引言”、“引论”、“绪论”,引言较短时可不标出“O。引言”类小标题。引论的内容一般是交代选题背景。

主要有:课题来源,本课题在国内外的研究进展状况。已有的研究成果,存在的问题。选题的意义,讨论的问题。本文分几部分,从哪些方面进行讨论,以及指导思想、论证方法等,均可根据内容的需要写在引论中。

相关百科

热门百科

首页
发表服务