北邮专业实验的实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

专业实验报告姓名:王启明班级:2017211202学号:2017211010学院:电子工程学院专业:电子信息科学与技术一.题目一:数字波形应用1.采用软件及语言软件:VScommunity2015,版本:14.0.25431.01Update3语言:C#,winform窗体2.设计思路根据题目要求,采用Winform窗体,依次设计两个序列的输入控件,不同函数的按钮,以及显示两个序列以及进行函数运算后的数字波形的窗口。设计了两个A,B的textbox输入框,可以输入二进制字符串,将二进制字符串转化为字符数组,再将单个字符转换为数字,然后进行判断是1还是0,再根据逻辑关系,向chart图表中输入1或0,如此循环,即可绘制出数字逻辑波形。3.实现功能及截图(A同或B为例,其他亦可实现)4.主要代码(以A同或B为例,其他类似)privatevoidButton7_Click(objectsender,EventArgse){//A同或BchartC.Series[波形].Points.Clear();inti;stringsar=textBoxA.Text.Trim();stringsbr=textBoxB.Text.Trim();string[]str=newstring[sar.Length];string[]svr=newstring[sbr.Length];for(i=0;itextBoxA.Text.Length;i++){str[i]=textBoxA.Text.Substring(i,1);svr[i]=textBoxB.Text.Substring(i,1);intchan=Convert.ToInt32(str[i]);intchbn=Convert.ToInt32(svr[i]);if(chan==chbn){chartC.Series[波形].Points.AddXY(i,1);if(i==textBoxA.Text.Length-1){chartC.Series[波形].Points.AddXY(i+1,1);}}else{chartC.Series[波形].Points.AddXY(i,0);if(i==textBoxA.Text.Length-1){chartC.Series[波形].Points.AddXY(i+1,0);}}}}二.题目二:电子钢琴1.采用软件及语言采用软件:pycharm,版本2018.3.3CommunityEdition采用语言:python2.设计思路用循环控制频率的增加,直到4000Hz;用四个字典分别存储四个音高(低音,中音,高音,高二度分别用L,M,G,H表示)的音符(1,2,3,4,5,6,7)对应的频率,然后将四个字典存储到一个列表里,输入弹奏的乐谱,输入格式为L12/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':'247'}music_2={'0':'M','1':'262','2':'296','3':'330','4':'349','5':'392','6':'440','7':'494'}music_3={'0':'G','1':'523','2':'587','3':'659','4':'698','5':'784','6':'880','7':'988'}music_4={'0':'H','1':'1047','2':'1175','3':'1319','4':'1397','5':'1568','6':'1760','7':'1976'}orginal_music=[music_1,music_2,music_3,music_4]#pinlvs是一个列表,存储输入的音符对应的频率,jiezous是一个列表,用于存储对应音符的节拍#音乐播放forjinrange(0,i):player.Beep(pinlvs[j],500)time.sleep(1./jiezous[j])三.题目三:采样定理1.采用软件及语言采用软件:pycharm,版本2018.3.3CommunityEdition采用语言:python2.设计思路thread线程控制窗口的显示与关闭,控制窗口的显示时间从而做出动画效果,分别画出ws=2wm,ws2wm,ws2wm时的图形,依次显示。3.实现功能及截图4.主要代码#线程函数thread1=Thread(target=close,args=(4,))thread1.start()plt.show()plot1()四:题目四:带权图任意两点间最短路径迪杰斯特拉算法1.相关科目:离散数学,数据结构与算法2.采用软件及语言采用软件:pycharm,版本2018.3.3CommunityEdition采用语言:python3.设计思路利用networkx模块4.运行结果5.主要代码.defDijkstra(G,start,end):RG=G.reverse();dist={};previous={}forvinRG.nodes():#都设置为无穷大dist[v]=float('inf')previous[v]='none'dist[end]=0u=end#print(dist)#print(min(dist,key=dist.get))whileu!=start:#获得最小值对应的键u=min(dist,key=dist.get)distu=dist[u]#print(distu)deldist[u]#print(RG.edges(u))#print(RG[u])foru,vinRG.edges(u):ifvindist:alt=distu+RG[u][v]['weight']ifaltdist[v]:dist[v]=altprevious[v]=upath=(start,)last=startwhilelast!=end:nxt=previous[last]path+=(nxt,)last=nxtreturnpath五.题目五:五子棋1.采用软件及语言采用软件:pycharm,版本2018.3.3CommunityEdition采用语言:python2.设计思路总体思路:人人对战用tkinter库写,人机对战用pygame写。(1)人人对战i棋盘绘制:窗口左半部分放置一块画布canvas用于棋盘绘制;右半部分放置四个标签label,分别用来落棋方提示的图片放置、文字放置,结果显示和状态显示;此外右下角放置一个按钮button用于重置。画布上设置背景,绘制线条、点、坐标的字母和数字。将标签和按钮放到指定位置。ii判断输赢:分别对落子位置的横纵轴位置和两个斜边位置的同色棋子进行计数如果任意一处同色棋子数量达到5或5以上,则判断赢家和游戏结束。每次棋子落下,都要调用一次判断输赢的逻辑。iii落子:每次坐标点击会捕获一个坐标位置,找出离这个坐标最近的棋位落子。(2)人机对战i棋盘绘制:pygame画棋盘,画棋子都比较简单,不多赘述。ii落子:需要判断鼠标事件,当鼠标左键点击,获取鼠标点击的位置,然后根据棋盘的位置,计算出棋子落在棋盘的位置。电脑下棋:遍历棋盘上的空位,根据每个位置8个方向上的棋型进行打分,最后看哪个位置得分最高,就下在哪里。iii棋型分析:iv判断输赢:同上3.运行结果及截图(1)选择界面:(2)人机对战:(3)人人对战实现的功能:做一个选择界面,可以通过选择人人对战人机对战按钮,进行选择所需要的游戏类型,退出一次游戏后可以回到选择界面进行重新选择,若不想再玩游戏,可以点击退出游戏按钮,进行退出游戏。其他功能见上方游戏截图4.主要代码(1)人人对战#右上方的棋子提示(工具)defshowColor(color):#输赢的提示、游戏结束的提示(工具)defshowMessage():#棋子的计数(工具)defpiecesCount(coor,pieces_count,t1,t2):#事件监听处理defcoorBack(event):#定义重置按钮的功能defgameReset():#判断输赢的逻辑#preJudge调用realJudge0,realJudge0调用realJudge1和realJudge2;#realJudge1负责横纵两轴的计数,realJudge2负责两斜线方向的计数#realJudge0汇总指定颜色棋子结果,作出决策,判断是否游戏结束#preJudge决定是判断黑棋还是判断白棋,对两种颜色的棋子判断进行导流落子defputPiece(piece_color)棋盘绘制#背景canvas=tk.Canvas(root,bg=saddlebrown,width=540,height=540)canvas.bind(Button-1,coorBack)#鼠标单击事件绑定canvas.grid(row=0,column=0,rowspan=6)#线条foriinrange(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.draw.rect(screen,BLACK_COLOR,(Outer_Width,Outer_Width,Border_Length,Border_Length),Border_Width)#画网格线def_draw_chessman(screen,point,stone_color):classAI:def__init__(self,line_points,chessman)defget_opponent_drop(self,point):defAI_drop(self):def_get_point_score(self,point):def_get_direction_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)鼠标事件监听:elifevent.type==KEYDOWN:画左侧信息显示:def_drawleftinfo(screen,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(r'C:\Users\Ivy\Desktop\五子棋1.jpg')background_image=ImageTk.PhotoImage(image2)background_label=Label(root,image=background_image)background_label.place(x=0,y=0,relwidth

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功