1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 实验二 代码 + 贪吃蛇大作战(360°寻路+AI自动蛇)

实验二 代码 + 贪吃蛇大作战(360°寻路+AI自动蛇)

时间:2024-02-10 12:46:39

相关推荐

实验二 代码 + 贪吃蛇大作战(360°寻路+AI自动蛇)

目录

一、实验目的

二、实验内容

三、实验过程展示

四、实验成果

五、实验代码

一、实验目的

1.实现基本的贪吃蛇的运动操作

2.实现AI蛇的自动运动

3.实现360°全方位运动

4.实现积分,死亡,加速等操作

二、实验内容

初始化蛇操作AI蛇路径选择碰撞检测蛇头方向转换AI蛇死亡检测,死亡后随机一个区域内生成等值的饼超时检测蛇运动操作游戏封装发

三、实验过程展示

3.1 初始化蛇体操作

初始化操作主要分为游戏全局初始化和蛇体初始化。

本游戏设置1条玩家操作蛇和6条AI自动蛇。首先我们定义Snake类,其中包括游戏开发时需要的所有组件,蛇头、身体、方向、猎捕点集、是否存活等。代码如下:

接下来我们定义全局的饼位置初始化,以及蛇的长度,颜色初始化。这里主要是针对AI蛇的初始化,代码如下:

蛇体组件初始化,这里主要是将蛇头的坐标初始化,并使用append函数加入到body中,并且赋值大小为bodysize。同时定义第二个点,有两个用处,第一判断此时蛇头的方向角,第二填充body。

这里要注意,初始化生成蛇的位置不能太靠近游戏的边界,否则会出现刚刚生成就碰撞死亡的现象。其次,我们的蛇身体不是点,是一个圆,所以要考虑到半径的问题,所以在生成的时候要加上半径,否则会导致身体超出边界。

代码如下:

3.2 方向判断

AI蛇没有鼠标进行方向指引,所以需要给它一个方向才能进行接下来的路径规划和运动。我编写了JodjePoint()函数来进行方向的选择。

这里的返回值为true和false,主要是反馈当前的方向是否需要变化,false表示需要以及更新direction和rewardList,用新的路径行走,true表示不需要变化,函数主体代码如下:

贪吃蛇问题,涉及到饼位置随机变换,AI蛇相对位置不固定等问题,导致地图中没有相对固定的点集,所以无法实时的通过迪杰斯特拉算法求出蛇头和最多的饼之间的最短路径。

所以这里我们采取动态规划思路,简而言之就是“当前最优”。通过广度优先搜索rewardList表,找到蛇头目前和现有的所有的饼中哪一个最近,然后更新hunt猎杀标志位,同时反馈角度和距离到direction中。广度优先搜索的代码如下:

这里在编写是会遇到一个问题:如果此时两条蛇均定位到同一个点,遵循游戏规则,如何实现饼的分配和避让

针对这个问题,我们采取实时检测蛇列表snakelist的动态,如果发现不匹配,说明此位置蛇死亡,更新饼rewardPoint列表,重复广度优先搜索操作,

这里要时刻记住python中atan函数求出来的角度是当前坐标系下的角度,需要转换为四个象限,分别加90,180,360。设置标志位que和临时标志位q,que的作用就是,放入for循环中返回最短距离点的下标。

在这里我们要注意一个角度的问题,根据网络上贪吃蛇大作战的游戏规则,蛇是无法直接掉头的,也就是说我们要计算一个向左和向右的极限角度,如下如所示,极限旋转角度为20°和340°,所以我们在书写代码的时候要加上判断

3.3 路径规划

pathDecision()函数主要是通过调用JudgePoint()函数更新当前的rewardList表格和Snake类中的猎杀目标信息hunt,通过JudgePoint()函数反馈的是否需要更新当前路由,来调用addRecF()函数进行蛇体的前进。

所用到的代码如下,遍历饼列表的核心思想还是广度优先搜索。

3.4 死亡检测/碰撞检测

蛇死亡主要分为两种:碰到边界死亡和撞到别的蛇身体死亡,这里我们编写函数aiisDead()来检测蛇是否死亡。

函数体中我们会发现,需要分为两个个检测阶段:

第一:检测是否碰到边界(考虑蛇每个节点是圆形,因此需要减去半径)

第二:检测当蛇列表不匹配时,蛇和列表中所有的蛇的body列表中是否有距离小于10 (蛇节点半径),这里采用for循环直接暴力求解。

3.5 鼠标监听和动作转换

调用pygame中的event()组件中的get()函数,实时反馈当前界面的所有外设动态。

为实现项目特色:用鼠标指引蛇方向,我们调用了event组件中的pos函数,实时反馈鼠标的坐标,将其反馈给Snake类中的方向参数,实现全方位的移动。

同时调用键盘接口函数KEYDOWN实时监听键盘按键,并通过a,b键操纵目标移动的速度,return键复活。

最后调用diplay组件中的update()函数,实现对游戏的刷新。

具体代码如下:

3.6 绘画蛇体和饼

绘画蛇体,调用pygame内部的draw组件,参考网络游戏贪吃蛇大作战,我将蛇身体用圆点进行展示,调用组件中的circle()函数。

代码如下:

遍历蛇的身体,获取body列表中的坐标。

相似的操作,遍历rewardList中所有的饼,获取饼的坐标进行打印,调用pygame中的draw组件。

代码如下:

四、实验成果

4.1运行界面展示

点击运行,正常进入运行界面,如下图所示:

4.2 阵亡界面展示

触到边界或者碰到别的蛇的body,导致蛇死亡,界面如下:

4.3 封装展示

使用pyinstaller将代码封装成.exe文件,可以更好的方便用户使用,方便后期发布游戏等操作。

如下图:

五、实验代码

import random, pygame,sys,math,operatorfrom pygame.locals import *pygame.init()fps=10Width = 1000Height= 900mystep=8quit=Trueclock=pygame.time.Clock()window=pygame.display.set_mode((Width,Height))pygame.display.set_caption('THT的贪吃蛇')size=5size1=10size2=20size3=30bodysize=16WHITE= (255, 255, 255)BLACK= ( 0, 0, 0)BLUE= ( 58, 95, 205)RED = (178, 34, 34)ORANGE = (255, 165, 0)PURPLE = (180, 82, 205)PINK= (235, 121, 159)GREEN= (102, 205, 170)DARKGREEN = ( 0, 155, 0)DARKGRAY = ( 40, 40, 40)color=[BLUE,ORANGE,PURPLE,PINK,GREEN,DARKGREEN]class Snake():length=0direction=0live=1kill=0hunt=0huntx=0hunty=0flage=0step=8ai=Falsefoodtimeflage=0color=REDbody=[]food=[]def init(self):self.length=self.direction=self.kill=self.huntx=self.hunty=self.hunt=self.foodtimeflage=0self.hunt=0self.step=8self.live=1self.flage=0self.body=[]snake=Snake()snake1=Snake()snake2=Snake()snake3=Snake()snake4=Snake()snake5=Snake()snake6=Snake()snakelist=[snake1,snake2,snake3,snake4,snake5,snake6]rewardNode=[]snakefood=[[],[],[],[],[],[]]def init():initsnake(snake)for i in range(len(snakelist)):initsnake(snakelist[i])snakelist[i].ai = Truesnakelist[i].hunt = isnakelist[i].color=color[i]snakelist[i].food.clear()rewardNode.clear()for food in snakefood:food.clear()for i in range(6):rewardNode.append([random.randint(0,Width-size1),random.randint(0,Height-size1),size1,size1])def initsnake(Snake):Snake.init()Snake.body.append([random.randint(10, Width - bodysize * 2), random.randint(10, Height - bodysize * 5), bodysize, bodysize])Snake.body.append([Snake.body[0][0], Snake.body[0][1] + bodysize / 2, bodysize, bodysize])Snake.body.append([Snake.body[1][0], Snake.body[1][1] + bodysize / 2, bodysize, bodysize])if Snake.ai:Snake.color = color[snakelist.index(Snake)]Snake.hunt=snakelist.index(Snake)def timeout(Snake):Snake.flage=0if not Snake.ai:Snake.flage=1for food in rewardNode:dist=round(math.sqrt((Snake.body[0][0]+Snake.body[0][2]//2-food[0]-food[2]//2)*(Snake.body[0][0]+Snake.body[0][2]//2-food[0]-food[2]//2)+(Snake.body[0][1]+Snake.body[0][2]//2-food[1]-food[2]//2)*(Snake.body[0][1]+Snake.body[0][2]//2-food[1]-food[2]//2)))if dist<=food[2]//2+Snake.body[0][2]//2:if food[2]==size1:Snake.flage+=2elif food[2]==size2:Snake.flage+=3size=food[2]i=rewardNode.index(food)rewardNode[i]=[random.randint(0,Width-size1),random.randint(0,Height-size1),size,size]for fo in snakefood:for food in fo:dist = round(math.sqrt((Snake.body[0][0] + Snake.body[0][2] // 2 - food[0] - food[2] // 2) * (Snake.body[0][0] + Snake.body[0][2] // 2 - food[0] - food[2] // 2) + (Snake.body[0][1] + Snake.body[0][2] // 2 - food[1] - food[2] // 2) * (Snake.body[0][1] + Snake.body[0][2] // 2 - food[1] - food[2] // 2)))if dist<=food[2]//2+Snake.body[0][2]//2:Snake.flage += 1size = food[2]fo.remove(food)while Snake.flage:addRectF(Snake)Snake.flage-=1if Snake.ai:pathDecide(Snake)else:Snake.flage=1Snake.body.pop()snake.foodtimeflage+=1if snake.foodtimeflage==180:while len(rewardNode)>60:del rewardNode[random.randint(0,len(rewardNode)-1)]rewardNode.append([random.randint(0,Width-size1),random.randint(0,Height-size1),size1,size1])if random.randint(0,5)==3:rewardNode.append([random.randint(0, Width - size1), random.randint(0, Height - size1), size2, size2])snake.foodtimeflage=0def aitimeout():for lsnake in snakelist:aiisDead(lsnake)if lsnake.live==0:aiDeath(lsnake)else:timeout(lsnake)def pathDecide(Snake):dist=[]direction=Snake.directionhx=Snake.body[0][0]hy=Snake.body[0][1]if judgePoint(Snake):for food in rewardNode:xx = food[0]yy = food[1]dis = round(math.sqrt((hx - xx) * (hx - xx) + (hy - yy) * (hy - yy)))dist.append(dis)smalldist=10000smalli=0for i in range(len(dist)):if dist[i]<smalldist:smalldist=dist[i]smalli=iSnake.hunt=smalliSnake.huntx=rewardNode[Snake.hunt][0]Snake.hunty=rewardNode[Snake.hunt][1]addRectF(Snake)def judgePoint(Snake):que=random.randint(0,len(rewardNode))q=queif (Snake.body[0][0]<=5 and (Snake.direction>180 or Snake.direction<360)):Snake.hunt=random.randint(0,len(rewardNode))return Falseelif ((Snake.body[0][1]<=5) and ((Snake.direction>=0 and Snake.direction<90) or (Snake.direction>270 and Snake.direction<=360))):Snake.hunt=random.randint(0,len(rewardNode))return Falseelif ((Snake.body[0][0]>=Width-5) and (Snake.direction>0 or Snake.direction<180)):Snake.hunt=random.randint(0,len(rewardNode))return Falseelif ((Snake.body[0][1]>=Height-5) and (Snake.direction>90 or Snake.direction<270)):Snake.hunt=random.randint(0,len(rewardNode))return Falsedir=[]for food in rewardNode:huntx=food[0]hunty=food[1]hx=Snake.body[0][0]hy=Snake.body[0][1]if huntx >= hx and hy > hunty:direction = round(math.atan((huntx - hx) / (hy - hunty)) * 180 / math.pi)elif huntx > hx and hunty >= hy:direction = round(math.atan((hunty - hy) / (huntx - hx)) * 180 / math.pi) + 90elif hx >= huntx and hunty > hy:direction = round(math.atan((hx - huntx) / (hunty - hy)) * 180 / math.pi) + 180elif hx > huntx and hy >= hunty:direction = round(math.atan((hy - hunty) / (hx - huntx)) * 180 / math.pi) + 270dist=round(math.sqrt((huntx-hx)*(huntx-hx)+(hunty-hy)*(hunty-hy)))dir.append([direction,dist])for i in range(len(dir)):d=dir[0][1]if Snake.direction>=135 and Snake.direction<=180:if dir[i][0]>=round(180-Snake.direction+360-45)%360 or dir[i][0]<=round(180-Snake.direction+45+360)%360:if d>dir[i][1]:d=dir[i][1]que=ielif Snake.direction>=180 and Snake.direction<=225:if dir[i][0]>=round(Snake.direction-180+45+360)%360 or dir[i][0]<=round(Snake.direction+45+360-180)%360:if d>dir[i][1]:d=dir[i][1]que=ielse:if dir[i][0]>=round(Snake.direction-45+360+180)%360 and dir[i][0]<=round(Snake.direction+45+360+180)%360:if d>dir[i][1]:d=dir[i][1]que=ix=Snake.body[0][0]-round(200*math.sin(Snake.direction/180*math.pi))y=Snake.body[0][1]+round(200*math.cos(Snake.direction/180*math.pi))if x<=0:x=10if y<=0:y=10if(x>=Width):x=980if(y>=Height):y=780for snake in snakelist:if snakelist.index(snake)!=snakelist.index(Snake):for body in snake.body:hx = Snake.body[0][0]hy = Snake.body[0][1]huntx=body[0]+body[2]hunty=body[1]+body[2]if huntx >= hx and hy > hunty:direction = round(math.atan((huntx - hx) / (hy - hunty)) * 180 / math.pi)elif huntx > hx and hunty >= hy:direction = round(math.atan((hunty - hy) / (huntx - hx)) * 180 / math.pi) + 90elif hx >= huntx and hunty > hy:direction = round(math.atan((hx - huntx) / (hunty - hy)) * 180 / math.pi) + 180elif hx > huntx and hy >= hunty:direction = round(math.atan((hy - hunty) / (hx - huntx)) * 180 / math.pi) + 270if Snake.direction<=20 or Snake.direction>=340:if direction>=round(Snake.direction-20+360)%360 or direction<=round(Snake.direction+20+360)%360:dist=round(math.sqrt((huntx-hx)*(huntx-hx)+(hunty-hy)*(hunty-hy)))if dist<=50:if que==q:if len(rewardNode)>=55:se=random.randint(0,len(rewardNode)-1)rewardNode[se]=[random.randint(0,Width-size1),random.randint(0,Height-size1),size1,size1]que=seelse:rewardNode.append([random.randint(0,Width-size1),random.randint(0,Height-size1),size1,size1])que=len(rewardNode)-1Snake.hunt=queSnake.direction=round(Snake.direction+150)%360# addRectF(Snake)# del Snake.body[len(Snake.body)-1]# addRectF(Snake)# del Snake.body[len(Snake.body) - 1]return Falseelse:if direction>=round(Snake.direction-20+360)%360 and direction<=round(Snake.direction+20+360)%360:dist = round(math.sqrt((huntx - hx) * (huntx - hx) + (hunty - hy) * (hunty - hy)))if dist <= 50:if que == q:if len(rewardNode) >= 55:se = random.randint(0, len(rewardNode) - 1)rewardNode[se] = [random.randint(0, Width - size1), random.randint(0, Height - size1),size1, size1]que = seelse:rewardNode.append([random.randint(0, Width - size1), random.randint(0, Height - size1), size1, size1])que = len(rewardNode) - 1Snake.hunt = queSnake.direction = round(Snake.direction + 150) % 360# addRectF(Snake)# del Snake.body[len(Snake.body) - 1]# addRectF(Snake)# del Snake.body[len(Snake.body) - 1]return Falsefor body in snake.body:hx = Snake.body[0][0]hy = Snake.body[0][1]huntx = body[0] + body[2]hunty = body[1] + body[2]if huntx >= hx and hy > hunty:direction = round(math.atan((huntx - hx) / (hy - hunty)) * 180 / math.pi)elif huntx > hx and hunty >= hy:direction = round(math.atan((hunty - hy) / (huntx - hx)) * 180 / math.pi) + 90elif hx >= huntx and hunty > hy:direction = round(math.atan((hx - huntx) / (hunty - hy)) * 180 / math.pi) + 180elif hx > huntx and hy >= hunty:direction = round(math.atan((hy - hunty) / (hx - huntx)) * 180 / math.pi)if Snake.direction <= 45 or Snake.direction >= 315:if direction >= round(Snake.direction - 45 + 360) % 360 or direction <= round(Snake.direction + 45 + 360) % 360:dist = round(math.sqrt((huntx - hx) * (huntx - hx) + (hunty - hy) * (hunty - hy)))if dist <= 50:if que == q:if len(rewardNode) >= 55:se = random.randint(0, len(rewardNode) - 1)rewardNode[se] = [random.randint(0, Width - size1), random.randint(0, Height - size1), size1,size1]que = seelse:rewardNode.append([random.randint(0, Width - size1), random.randint(0, Height - size1), size1, size1])que = len(rewardNode) - 1Snake.hunt = queSnake.direction = round(Snake.direction + 150) % 360# addRectF(Snake)# del Snake.body[len(Snake.body) - 1]# addRectF(Snake)# del Snake.body[len(Snake.body) - 1]return Falseelse:if direction >= round(Snake.direction - 45 + 360) % 360 and direction <= round(Snake.direction + 45 + 360) % 360:dist = round(math.sqrt((huntx - hx) * (huntx - hx) + (hunty - hy) * (hunty - hy)))if dist <= 50:if que == q:if len(rewardNode) >= 55:se = random.randint(0, len(rewardNode) - 1)rewardNode[se] = [random.randint(0, Width - size1), random.randint(0, Height - size1), size1,size1]que = seelse:rewardNode.append([random.randint(0, Width - size1), random.randint(0, Height - size1), size1, size1])que = len(rewardNode) - 1Snake.hunt = queSnake.direction = round(Snake.direction + 150) % 360# addRectF(Snake)# del Snake.body[len(Snake.body) - 1]# addRectF(Snake)# del Snake.body[len(Snake.body) - 1]return Falseif rewardNode[Snake.hunt] ==[]:Snake.hunt=random.randint(0,len(rewardNode))return Falsereturn Truedef aiisDead(Snake):if Snake.body[0][0]<=0 or Snake.body[0][1]<=0 or Snake.body[0][0]>=Width-Snake.body[0][2] or Snake.body[0][1]>=Height-Snake.body[0][2]:Snake.live=0return Truefor lsnake in snakelist:if snakelist.index(lsnake)!=snakelist.index(Snake):for body in lsnake.body:if math.sqrt(((Snake.body[0][0] + Snake.body[0][2] // 2) - (body[0] + body[2] // 2)) * ((Snake.body[0][0] + Snake.body[0][2] // 2) - (body[0] + body[2] // 2)) + ((Snake.body[0][1] + Snake.body[0][2] // 2) - (body[1] + body[2] // 2)) * ((Snake.body[0][1] + Snake.body[0][2] // 2) - (body[1] + body[2] // 2))) <= 10:Snake.live=0return Truefor body in snake.body:if math.sqrt(((Snake.body[0][0]+Snake.body[0][2]//2)-(body[0]+body[2]//2))*((Snake.body[0][0]+Snake.body[0][2]//2)-(body[0]+body[2]//2))+((Snake.body[0][1]+Snake.body[0][2]//2)-(body[1]+body[2]//2))*((Snake.body[0][1]+Snake.body[0][2]//2)-(body[1]+body[2]//2)))<=10:Snake.live = 0snake.kill+=1return Truereturn Falsedef isDead(Snake):if Snake.body[0][0]<=0 or Snake.body[0][1]<=0 or Snake.body[0][0]>=Width-Snake.body[0][2] or Snake.body[0][1]>=Height-Snake.body[0][2]:Snake.live=0return Truefor lsnake in snakelist:for body in lsnake.body:if math.sqrt(((Snake.body[0][0] + Snake.body[0][2] // 2) - (body[0] + body[2] // 2)) * ((Snake.body[0][0] + Snake.body[0][2] // 2) - (body[0] + body[2] // 2)) + ((Snake.body[0][1] + Snake.body[0][2] // 2) - (body[1] + body[2] // 2)) * ((Snake.body[0][1] + Snake.body[0][2] // 2) - (body[1] + body[2] // 2))) <= 10:Snake.live=0return Truereturn Falsedef aiDeath(Snake):if Snake.live==0:for body in Snake.body:x=body[0]y=body[1]s=body[2]Snake.body.pop()snakefood[snakelist.index(Snake)].append([x+random.randint(0,5)*10,y+random.randint(0,5)*10,s//2,s//2])Snake.body.clear()initsnake(Snake)Snake.live=1def addRectF(Snake):hx=Snake.body[0][0]hy=Snake.body[0][1]if Snake.ai:huntx=rewardNode[Snake.hunt][0]hunty=rewardNode[Snake.hunt][1]else:huntx=Snake.huntxhunty=Snake.huntydirection=Snake.directionif huntx>=hx and hy>hunty:direction=round(math.atan((huntx-hx)/(hy-hunty))*180/math.pi)elif huntx>hx and hunty>=hy:direction=round(math.atan((hunty-hy)/(huntx-hx))*180/math.pi)+90elif hx>=huntx and hunty>hy:direction=round(math.atan((hx-huntx)/(hunty-hy))*180/math.pi)+180elif hx>huntx and hy>=hunty :direction=round(math.atan((hy-hunty)/(hx-huntx))*180/math.pi)+270if (Snake.direction-direction+360)%360>=175 and (Snake.direction-direction+360)%360<=185:direction+=30Snake.direction=direction%360Snake.body.insert(0,[Snake.body[0][0]+round(Snake.step*math.sin(Snake.direction/180*math.pi)),Snake.body[0][1]-round(Snake.step*math.cos(Snake.direction/180*math.pi)),Snake.body[0][2],Snake.body[0][2]])def printsnake(Snake,col):for fo in snakefood:for food in fo:foodsize = food[2]//3foodx=int(food[0]+food[2]//2)foody=int(food[1]+food[2]//2)pos=foodx,foodypygame.draw.circle(window, color[snakefood.index(fo)], pos, foodsize, 0)for body in Snake.body:bodysize=body[2]hx=int(body[0]+bodysize//2)hy=int(body[1]+bodysize//2)pos=hx,hypygame.draw.circle(window, col, pos, bodysize//2,0 )pygame.draw.circle(window, BLACK, pos, bodysize//2,1)def printrewardNode():for body in rewardNode:bodysize = body[2]hx = int(body[0] + bodysize // 2)hy = int(body[1] + bodysize // 2)pos = hx, hypygame.draw.circle(window, WHITE, pos, bodysize // 2, 0)def printtext():textFont = pygame.font.SysFont("simsunnsimsun", 20)textSurface = textFont.render("得分: "+str(len(snake.body)), True, WHITE)window.blit(textSurface, (20,30))textSurface = textFont.render("击杀: " + str(snake.kill), True, WHITE)window.blit(textSurface, (20,60))textSurface = textFont.render("排行榜: " , True, WHITE)window.blit(textSurface, (700, 5))rect=[(720,30),(720,55),(720,80),(720,105),(720,130),(720,155),(720,180)]seq=[]seq.append([6,len(snake.body)])for lsnake in snakelist:seq.append([snakelist.index(lsnake),len(lsnake.body)])seq.sort(key=operator.itemgetter(1),reverse=True)name=['小蓝','小橙','小紫','小粉','小青','小绿','我的']for paixu in seq:textSurface = textFont.render(str(seq.index(paixu)+1)+'. '+name[paixu[0]]+''+str(paixu[1]), True, WHITE)window.blit(textSurface, rect[seq.index(paixu)])init()while quit:if snake.live==1:clock.tick(fps)pygame.draw.rect(window, BLACK, (0, 0, Width, Height))aitimeout()timeout(snake)for event in pygame.event.get():if event.type == pygame.QUIT:quit = Falseif event.type == MOUSEMOTION:snake.huntx, snake.hunty = event.posif event.type == pygame.KEYDOWN:if event.key == pygame.K_a:snake.step = 12if event.key == pygame.K_RETURN:snake.live = 1if event.key==pygame.K_b:snake.step = 8printrewardNode()for i in range(len(snakelist)):printsnake(snakelist[i], snakelist[i].color)printsnake(snake, snake.color)isDead(snake)printtext()else:textFont = pygame.font.SysFont("simsunnsimsun", 100)textSurface = textFont.render("GAME OVER!!!!", True, WHITE)window.blit(textSurface, (200, 300))for event in pygame.event.get():if event.type == pygame.KEYDOWN:if event.key == pygame.K_RETURN:snake.live = 1init()if event.type == pygame.QUIT:quit = Falsepygame.display.update()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。