北邮专业实验的实验报告_第1页
北邮专业实验的实验报告_第2页
北邮专业实验的实验报告_第3页
北邮专业实验的实验报告_第4页
北邮专业实验的实验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、专业实验报告姓名:王启明 班级:学号: 学院:电子工程学院专业:电子信息科学与技术一题目一:数字波形应用1. 采用软件及语言软件:VS community2015,版本:14.0.25431.01Update3语言:C#,winform窗体2. 设计思路根据题目要求,采用Winform窗体,依次设计两个序列的输入控件,不同函数的按钮,以及显示两个序列以及进行函数运算后的数字波形的窗口。设计了两个A,B的textbox输入框,可以输入二进制字符串,将二进制字符串转化为字符数组,再将单个字符转换为数字,然后进行判断是1还是0,再根据逻辑关系,向chart图表中输入1或0,如此循环,即可绘制出数字逻

2、辑波形。3. 实现功能及截图(A同或B为例,其他亦可实现)4. 主要代码(以A同或B为例,其他类似)private void Button7_Click(object sender, EventArgs e) /A同或B chartC.Series波形.Points.Clear(); int i; string sar = textBoxA.Text.Trim(); string sbr = textBoxB.Text.Trim(); string str = new stringsar.Length; string svr = new stringsbr.Length; for (i = 0

3、; i textBoxA.Text.Length; i+) stri = textBoxA.Text.Substring(i, 1); svri = textBoxB.Text.Substring(i, 1); int chan = Convert.ToInt32(stri); int chbn = Convert.ToInt32(svri); if (chan = chbn) chartC.Series波形.Points.AddXY(i, 1); if (i = textBoxA.Text.Length-1) chartC.Series波形.Points.AddXY(i+1, 1); els

4、e chartC.Series波形.Points.AddXY(i, 0); if (i = textBoxA.Text.Length-1) chartC.Series波形.Points.AddXY(i+1, 0); 二题目二:电子钢琴1. 采用软件及语言采用软件:pycharm,版本2018.3.3Community Edition采用语言:python2. 设计思路用循环控制频率的增加,直到4000Hz;用四个字典分别存储四个音高(低音,中音,高音,高二度分别用L,M,G,H表示)的音符(1,2,3,4,5,6,7)对应的频率,然后将四个字典存储到一个列表里,输入弹奏的乐谱,输入格式为L12

5、/M32/,表示的意思是L为音符的音高,1表示(1,2,3,4,5,6,7)中的1,后面的2表示1/2拍,在这里根据实际情况,一般只会输入1,2,4,8,在本程序中定义一拍延续一秒钟,1/2拍则是0.5秒钟。3.实现功能及截图实现频率依次升高100Hz,实现输入一串音符,依次播放。4.主要代码#存储对应音高音符的频率music_1 = 0: L, 1: 131, 2: 147, 3: 165, 4: 175, 5: 196, 6: 220, 7: 247music_2 = 0: M, 1: 262, 2: 296, 3: 330, 4: 349, 5: 392, 6: 440, 7: 494m

6、usic_3 = 0: G, 1: 523, 2: 587, 3: 659, 4: 698, 5: 784, 6: 880, 7: 988music_4 = 0: H, 1: 1047, 2: 1175, 3: 1319, 4: 1397, 5: 1568, 6: 1760, 7: 1976orginal_music = music_1, music_2, music_3, music_4#pinlvs是一个列表,存储输入的音符对应的频率,jiezous是一个列表,用于存储对应音符的节拍#音乐播放for j in range(0,i): player.Beep(pinlvsj, 500) ti

7、me.sleep(1./jiezousj)三题目三:采样定理1. 采用软件及语言采用软件:pycharm,版本2018.3.3Community Edition采用语言:python2. 设计思路thread线程控制窗口的显示与关闭,控制窗口的显示时间从而做出动画效果,分别画出ws=2wm,ws2wm时的图形,依次显示。3. 实现功能及截图4. 主要代码#线程函数thread1 = Thread(target=close, args=(4,)thread1.start()plt.show()plot1()四:题目四:带权图任意两点间最短路径迪杰斯特拉算法1. 相关科目:离散数学,数据结构与算法

8、2.采用软件及语言采用软件:pycharm,版本2018.3.3Community Edition采用语言:python3.设计思路利用networkx模块4.运行结果5. 主要代码.def Dijkstra(G, start, end): RG = G.reverse(); dist = ; previous = for v in RG.nodes(): #都设置为无穷大 distv = float(inf) previousv = none distend = 0 u = end #print(dist) #print(min(dist, key=dist.get) while u !=

9、start: #获得最小值对应的键 u = min(dist, key=dist.get) distu = distu # print(distu) del distu # print(RG.edges(u) # print(RGu) for u, v in RG.edges(u): if v in dist: alt = distu + RGuvweight if alt distv: distv = alt previousv = u path = (start,) last = start while last != end: nxt = previouslast path += (nx

10、t,) last = nxt return path五题目五:五子棋1. 采用软件及语言采用软件:pycharm,版本2018.3.3Community Edition采用语言:python2. 设计思路总体思路:人人对战用tkinter库写,人机对战用pygame写。(1)人人对战i棋盘绘制: 窗口左半部分放置一块画布 canvas 用于棋盘绘制;右半部分放置四个标签 label ,分别用来落棋方提示的图片放置、文字放置,结果显示和状态显示;此外右下角放置一个按钮 button 用于重置。画布上设置背景,绘制线条、点、坐标的字母和数字。将标签和按钮放到指定位置。ii判断输赢:分别对落子位置的

11、横纵轴位置和两个斜边位置的同色棋子进行计数如果任意一处同色棋子数量达到5或5以上,则判断赢家和游戏结束。每次棋子落下,都要调用一次判断输赢的逻辑。iii落子:每次坐标点击会捕获一个坐标位置,找出离这个坐标最近的棋位落子。(2) 人机对战i棋盘绘制:pygame画棋盘,画棋子都比较简单,不多赘述。ii落子:需要判断鼠标事件,当鼠标左键点击,获取鼠标点击的位置,然后根据棋盘的位置,计算出棋子落在棋盘的位置。电脑下棋:遍历棋盘上的空位,根据每个位置8个方向上的棋型进行打分,最后看哪个位置得分最高,就下在哪里。iii棋型分析:iv判断输赢:同上3. 运行结果及截图(1)选择界面:(2)人机对战:(3)

12、人人对战实现的功能:做一个选择界面,可以通过选择人人对战人机对战按钮,进行选择所需要的游戏类型,退出一次游戏后可以回到选择界面进行重新选择,若不想再玩游戏,可以点击退出游戏按钮,进行退出游戏。其他功能见上方游戏截图4. 主要代码(1) 人人对战#右上方的棋子提示(工具)def showColor(color):#输赢的提示、游戏结束的提示(工具)def showMessage():#棋子的计数(工具)def piecesCount(coor, pieces_count, t1, t2):#事件监听处理def coorBack(event):#定义重置按钮的功能def gameReset():#

13、判断输赢的逻辑#preJudge调用realJudge0,realJudge0调用realJudge1和realJudge2;#realJudge1负责横纵两轴的计数,realJudge2负责两斜线方向的计数#realJudge0汇总指定颜色棋子结果,作出决策,判断是否游戏结束#preJudge决定是判断黑棋还是判断白棋,对两种颜色的棋子判断进行导流落子def putPiece(piece_color)棋盘绘制#背景canvas = tk.Canvas(root, bg = saddlebrown, width = 540, height = 540)canvas.bind(, coorBac

14、k) #鼠标单击事件绑定canvas.grid(row = 0, column = 0, rowspan = 6)#线条for i in range(15): canvas.create_line(32, (35 * i + 38), 522, (35 * i + 38) canvas.create_line(35 * i + 32), 38, (35 * i + 32), 528)(2) 人机对战 画棋盘def _draw_checkerboard(screen): # 填充棋盘背景色 screen.fill(Checkerboard_Color) # 画棋盘网格线外的边框 pygame.d

15、raw.rect(screen, BLACK_COLOR, (Outer_Width, Outer_Width, Border_Length, Border_Length), Border_Width) # 画网格线def _draw_chessman(screen, point, stone_color):class AI:def _init_(self, line_points, chessman)def get_opponent_drop(self, point):def AI_drop(self):def _get_point_score(self, point):def _get_d

16、irection_score(self, point, x_offset, y_offset):count = 0 # 落子处我方连续子数_count = 0 # 落子处对方连续子数space = None # 我方连续子中有无空格_space = None # 对方连续子中有无空格both = 0 # 我方连续子两端有无阻挡_both = 0 # 对方连续子两端有无阻挡生成电脑玩家:computer = AI(Line_Points, WHITE_CHESSMAN)鼠标事件监听:elif event.type = KEYDOWN:画左侧信息显示:def _drawleftinfo(scree

17、n, font, cur_runner, black_win_count, white_win_count)判断每个方向上得分,然后决定下在哪里:def _get_store(self, point, x_offset, y_offset, next)(3) 选择界面窗口创建:root = Tk()添加背景图片:image2 = Image.open(rC:UsersIvyDesktop五子棋1.jpg)background_image = ImageTk.PhotoImage(image2)background_label = Label(root, image=background_image)background_label.pla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论