有趣的MATLAB 1.游戏程序

合集下载

13个有趣又好玩的Python游戏代码分享

13个有趣又好玩的Python游戏代码分享

13个有趣⼜好玩的Python游戏代码分享⽬录1、吃⾦币2、打乒乓3、滑雪4、并⼣⼣版飞机⼤战5、打地⿏6、⼩恐龙7、消消乐8、俄罗斯⽅块9、贪吃蛇10、24点⼩游戏11、平衡⽊12、外星⼈⼊侵13、井字棋888经常听到有朋友说,学习编程是⼀件⾮常枯燥⽆味的事情。

其实,⼤家有没有认真想过,可能是我们的学习⽅法不对?⽐⽅说,你有没有想过,可以通过打游戏来学编程?今天我想跟⼤家分享⼏个Python⼩游戏,教你如何通过边打游戏边学编程!1、吃⾦币源码分享:import osimport cfgimport sysimport pygameimport randomfrom modules import *'''游戏初始化'''def initGame():# 初始化pygame, 设置展⽰窗⼝pygame.init()screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('catch coins —— 九歌')# 加载必要的游戏素材game_images = {}for key, value in cfg.IMAGE_PATHS.items():if isinstance(value, list):images = []for item in value: images.append(pygame.image.load(item))game_images[key] = imageselse:game_images[key] = pygame.image.load(value)game_sounds = {}for key, value in cfg.AUDIO_PATHS.items():if key == 'bgm': continuegame_sounds[key] = pygame.mixer.Sound(value)# 返回初始化数据return screen, game_images, game_sounds'''主函数'''def main():# 初始化screen, game_images, game_sounds = initGame()# 播放背景⾳乐pygame.mixer.music.load(cfg.AUDIO_PATHS['bgm'])pygame.mixer.music.play(-1, 0.0)# 字体加载font = pygame.font.Font(cfg.FONT_PATH, 40)# 定义herohero = Hero(game_images['hero'], position=(375, 520))# 定义⾷物组food_sprites_group = pygame.sprite.Group()generate_food_freq = random.randint(10, 20)generate_food_count = 0# 当前分数/历史最⾼分score = 0highest_score = 0 if not os.path.exists(cfg.HIGHEST_SCORE_RECORD_FILEPATH) else int(open(cfg.HIGHEST_SCORE_RECORD_FILEPATH).read()) # 游戏主循环clock = pygame.time.Clock()while True:# --填充背景screen.fill(0)screen.blit(game_images['background'], (0, 0))# --倒计时信息countdown_text = 'Count down: ' + str((90000 - pygame.time.get_ticks()) // 60000) + ":" + str((90000 - pygame.time.get_ticks()) // 1000 % 60).zfill(2) countdown_text = font.render(countdown_text, True, (0, 0, 0))countdown_rect = countdown_text.get_rect()countdown_rect.topright = [cfg.SCREENSIZE[0]-30, 5]screen.blit(countdown_text, countdown_rect)# --按键检测for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()key_pressed = pygame.key.get_pressed()if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:hero.move(cfg.SCREENSIZE, 'left')if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:hero.move(cfg.SCREENSIZE, 'right')# --随机⽣成⾷物generate_food_count += 1if generate_food_count > generate_food_freq:generate_food_freq = random.randint(10, 20)generate_food_count = 0food = Food(game_images, random.choice(['gold',] * 10 + ['apple']), cfg.SCREENSIZE)food_sprites_group.add(food)# --更新⾷物for food in food_sprites_group:if food.update(): food_sprites_group.remove(food)# --碰撞检测for food in food_sprites_group:if pygame.sprite.collide_mask(food, hero):game_sounds['get'].play()food_sprites_group.remove(food)score += food.scoreif score > highest_score: highest_score = score# --画herohero.draw(screen)# --画⾷物food_sprites_group.draw(screen)# --显⽰得分score_text = f'Score: {score}, Highest: {highest_score}'score_text = font.render(score_text, True, (0, 0, 0))score_rect = score_text.get_rect()score_rect.topleft = [5, 5]screen.blit(score_text, score_rect)# --判断游戏是否结束if pygame.time.get_ticks() >= 90000:break# --更新屏幕pygame.display.flip()clock.tick(cfg.FPS)# 游戏结束, 记录最⾼分并显⽰游戏结束画⾯fp = open(cfg.HIGHEST_SCORE_RECORD_FILEPATH, 'w')fp.write(str(highest_score))fp.close()return showEndGameInterface(screen, cfg, score, highest_score)'''run'''if __name__ == '__main__':while main():pass2、打乒乓源码分享:import sysimport cfgimport pygamefrom modules import *'''定义按钮'''def Button(screen, position, text, button_size=(200, 50)):left, top = positionbwidth, bheight = button_sizepygame.draw.line(screen, (150, 150, 150), (left, top), (left+bwidth, top), 5)pygame.draw.line(screen, (150, 150, 150), (left, top-2), (left, top+bheight), 5)pygame.draw.line(screen, (50, 50, 50), (left, top+bheight), (left+bwidth, top+bheight), 5)pygame.draw.line(screen, (50, 50, 50), (left+bwidth, top+bheight), (left+bwidth, top), 5)pygame.draw.rect(screen, (100, 100, 100), (left, top, bwidth, bheight))font = pygame.font.Font(cfg.FONTPATH, 30)text_render = font.render(text, 1, (255, 235, 205))return screen.blit(text_render, (left+50, top+10))'''Function:开始界⾯Input:--screen: 游戏界⾯Return:--game_mode: 1(单⼈模式)/2(双⼈模式)'''def startInterface(screen):clock = pygame.time.Clock()while True:screen.fill((41, 36, 33))button_1 = Button(screen, (150, 175), '1 Player')button_2 = Button(screen, (150, 275), '2 Player')for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.MOUSEBUTTONDOWN:if button_1.collidepoint(pygame.mouse.get_pos()):return 1elif button_2.collidepoint(pygame.mouse.get_pos()):return 2clock.tick(10)pygame.display.update()'''结束界⾯'''def endInterface(screen, score_left, score_right):clock = pygame.time.Clock()font1 = pygame.font.Font(cfg.FONTPATH, 30)font2 = pygame.font.Font(cfg.FONTPATH, 20)msg = 'Player on left won!' if score_left > score_right else 'Player on right won!' texts = [font1.render(msg, True, cfg.WHITE),font2.render('Press ESCAPE to quit.', True, cfg.WHITE),font2.render('Press ENTER to continue or play again.', True, cfg.WHITE)] positions = [[120, 200], [155, 270], [80, 300]]while True:screen.fill((41, 36, 33))for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_RETURN:returnelif event.key == pygame.K_ESCAPE:sys.exit()pygame.quit()for text, pos in zip(texts, positions):screen.blit(text, pos)clock.tick(10)pygame.display.update()'''运⾏游戏Demo'''def runDemo(screen):# 加载游戏素材hit_sound = pygame.mixer.Sound(cfg.HITSOUNDPATH)goal_sound = pygame.mixer.Sound(cfg.GOALSOUNDPATH)pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.play(-1, 0.0)font = pygame.font.Font(cfg.FONTPATH, 50)# 开始界⾯game_mode = startInterface(screen)# 游戏主循环# --左边球拍(ws控制, 仅双⼈模式时可控制)score_left = 0racket_left = Racket(cfg.RACKETPICPATH, 'LEFT', cfg)# --右边球拍(↑↓控制)score_right = 0racket_right = Racket(cfg.RACKETPICPATH, 'RIGHT', cfg)# --球ball = Ball(cfg.BALLPICPATH, cfg)clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit(-1)screen.fill((41, 36, 33))# 玩家操作pressed_keys = pygame.key.get_pressed()if pressed_keys[pygame.K_UP]:racket_right.move('UP')elif pressed_keys[pygame.K_DOWN]:racket_right.move('DOWN')if game_mode == 2:if pressed_keys[pygame.K_w]:racket_left.move('UP')elif pressed_keys[pygame.K_s]:racket_left.move('DOWN')else:racket_left.automove(ball)# 球运动scores = ball.move(ball, racket_left, racket_right, hit_sound, goal_sound) score_left += scores[0]score_right += scores[1]# 显⽰# --分隔线pygame.draw.rect(screen, cfg.WHITE, (247, 0, 6, 500))# --球ball.draw(screen)# --拍racket_left.draw(screen)racket_right.draw(screen)# --得分screen.blit(font.render(str(score_left), False, cfg.WHITE), (150, 10))screen.blit(font.render(str(score_right), False, cfg.WHITE), (300, 10))if score_left == 11 or score_right == 11:return score_left, score_rightclock.tick(100)pygame.display.update()'''主函数'''def main():# 初始化pygame.init()pygame.mixer.init()screen = pygame.display.set_mode((cfg.WIDTH, cfg.HEIGHT))pygame.display.set_caption('pingpong —— 九歌')# 开始游戏while True:score_left, score_right = runDemo(screen)endInterface(screen, score_left, score_right)'''run'''if __name__ == '__main__':main()3、滑雪源码分享:import sysimport cfgimport pygameimport random'''滑雪者类'''class SkierClass(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)# 滑雪者的朝向(-2到2)self.direction = 0self.imagepaths = cfg.SKIER_IMAGE_PATHS[:-1]self.image = pygame.image.load(self.imagepaths[self.direction])self.rect = self.image.get_rect()self.rect.center = [320, 100]self.speed = [self.direction, 6-abs(self.direction)*2]'''改变滑雪者的朝向. 负数为向左,正数为向右,0为向前'''def turn(self, num):self.direction += numself.direction = max(-2, self.direction)self.direction = min(2, self.direction)center = self.rect.centerself.image = pygame.image.load(self.imagepaths[self.direction])self.rect = self.image.get_rect()self.rect.center = centerself.speed = [self.direction, 6-abs(self.direction)*2]return self.speed'''移动滑雪者'''def move(self):self.rect.centerx += self.speed[0]self.rect.centerx = max(20, self.rect.centerx)self.rect.centerx = min(620, self.rect.centerx)'''设置为摔倒状态'''def setFall(self):self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])'''设置为站⽴状态'''def setForward(self):self.direction = 0self.image = pygame.image.load(self.imagepaths[self.direction]) '''Function:障碍物类Input:img_path: 障碍物图⽚路径location: 障碍物位置attribute: 障碍物类别属性'''class ObstacleClass(pygame.sprite.Sprite):def __init__(self, img_path, location, attribute):pygame.sprite.Sprite.__init__(self)self.img_path = img_pathself.image = pygame.image.load(self.img_path)self.location = locationself.rect = self.image.get_rect()self.rect.center = self.locationself.attribute = attributeself.passed = False'''移动'''def move(self, num):self.rect.centery = self.location[1] - num'''创建障碍物'''def createObstacles(s, e, num=10):obstacles = pygame.sprite.Group()locations = []for i in range(num):row = random.randint(s, e)col = random.randint(0, 9)location = [col*64+20, row*64+20]if location not in locations:locations.append(location)attribute = random.choice(list(cfg.OBSTACLE_PATHS.keys())) img_path = cfg.OBSTACLE_PATHS[attribute]obstacle = ObstacleClass(img_path, location, attribute)obstacles.add(obstacle)return obstacles'''合并障碍物'''def AddObstacles(obstacles0, obstacles1):obstacles = pygame.sprite.Group()for obstacle in obstacles0:obstacles.add(obstacle)for obstacle in obstacles1:obstacles.add(obstacle)return obstacles'''显⽰游戏开始界⾯'''def ShowStartInterface(screen, screensize):screen.fill((255, 255, 255))tfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//5)cfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//20)title = tfont.render(u'滑雪游戏', True, (255, 0, 0))content = cfont.render(u'按任意键开始游戏', True, (0, 0, 255))trect = title.get_rect()trect.midtop = (screensize[0]/2, screensize[1]/5)crect = content.get_rect()crect.midtop = (screensize[0]/2, screensize[1]/2)screen.blit(title, trect)screen.blit(content, crect)while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:returnpygame.display.update()'''显⽰分数'''def showScore(screen, score, pos=(10, 10)):font = pygame.font.Font(cfg.FONTPATH, 30)score_text = font.render("Score: %s" % score, True, (0, 0, 0))screen.blit(score_text, pos)'''更新当前帧的游戏画⾯'''def updateFrame(screen, obstacles, skier, score):screen.fill((255, 255, 255))obstacles.draw(screen)screen.blit(skier.image, skier.rect)showScore(screen, score)pygame.display.update()'''主程序'''def main():# 游戏初始化pygame.init()pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)# 设置屏幕screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('滑雪游戏 —— 九歌')# 游戏开始界⾯ShowStartInterface(screen, cfg.SCREENSIZE)# 实例化游戏精灵# --滑雪者skier = SkierClass()# --创建障碍物obstacles0 = createObstacles(20, 29)obstacles1 = createObstacles(10, 19)obstaclesflag = 0obstacles = AddObstacles(obstacles0, obstacles1)# 游戏clockclock = pygame.time.Clock()# 记录滑雪的距离distance = 0# 记录当前的分数score = 0# 记录当前的速度speed = [0, 6]# 游戏主循环while True:# --事件捕获for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT or event.key == pygame.K_a:speed = skier.turn(-1)elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:speed = skier.turn(1)# --更新当前游戏帧的数据skier.move()distance += speed[1]if distance >= 640 and obstaclesflag == 0:obstaclesflag = 1obstacles0 = createObstacles(20, 29)obstacles = AddObstacles(obstacles0, obstacles1)if distance >= 1280 and obstaclesflag == 1:obstaclesflag = 0distance -= 1280for obstacle in obstacles0:obstacle.location[1] = obstacle.location[1] - 1280obstacles1 = createObstacles(10, 19)obstacles = AddObstacles(obstacles0, obstacles1)for obstacle in obstacles:obstacle.move(distance)# --碰撞检测hitted_obstacles = pygame.sprite.spritecollide(skier, obstacles, False)if hitted_obstacles:if hitted_obstacles[0].attribute == "tree" and not hitted_obstacles[0].passed: score -= 50skier.setFall()updateFrame(screen, obstacles, skier, score)pygame.time.delay(1000)skier.setForward()speed = [0, 6]hitted_obstacles[0].passed = Trueelif hitted_obstacles[0].attribute == "flag" and not hitted_obstacles[0].passed: score += 10obstacles.remove(hitted_obstacles[0])# --更新屏幕updateFrame(screen, obstacles, skier, score)clock.tick(cfg.FPS)'''run'''if __name__ == '__main__':main();4、并⼣⼣版飞机⼤战源码分享:import sysimport cfgimport pygamefrom modules import *'''游戏界⾯'''def GamingInterface(num_player, screen):# 初始化pygame.mixer.music.load(cfg.SOUNDPATHS['Cool Space Music'])pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)explosion_sound = pygame.mixer.Sound(cfg.SOUNDPATHS['boom'])fire_sound = pygame.mixer.Sound(cfg.SOUNDPATHS['shot'])font = pygame.font.Font(cfg.FONTPATH, 20)# 游戏背景图bg_imgs = [cfg.IMAGEPATHS['bg_big'], cfg.IMAGEPATHS['seamless_space'], cfg.IMAGEPATHS['space3']] bg_move_dis = 0bg_1 = pygame.image.load(bg_imgs[0]).convert()bg_2 = pygame.image.load(bg_imgs[1]).convert()bg_3 = pygame.image.load(bg_imgs[2]).convert()# 玩家, ⼦弹和⼩⾏星精灵组player_group = pygame.sprite.Group()bullet_group = pygame.sprite.Group()asteroid_group = pygame.sprite.Group()# 产⽣⼩⾏星的时间间隔asteroid_ticks = 90for i in range(num_player):player_group.add(Ship(i+1, cfg))clock = pygame.time.Clock()# 分数score_1, score_2 = 0, 0# 游戏主循环while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()# --玩家⼀: ↑↓←→控制, j射击; 玩家⼆: wsad控制, 空格射击pressed_keys = pygame.key.get_pressed()for idx, player in enumerate(player_group):direction = Noneif idx == 0:if pressed_keys[pygame.K_UP]:direction = 'up'elif pressed_keys[pygame.K_DOWN]:direction = 'down'elif pressed_keys[pygame.K_LEFT]:direction = 'left'elif pressed_keys[pygame.K_RIGHT]:direction = 'right'if direction:player.move(direction)if pressed_keys[pygame.K_j]:if player.cooling_time == 0:fire_sound.play()bullet_group.add(player.shot())player.cooling_time = 20elif idx == 1:if pressed_keys[pygame.K_w]:direction = 'up'elif pressed_keys[pygame.K_s]:direction = 'down'elif pressed_keys[pygame.K_a]:direction = 'left'elif pressed_keys[pygame.K_d]:direction = 'right'if direction:player.move(direction)if pressed_keys[pygame.K_SPACE]:if player.cooling_time == 0:fire_sound.play()bullet_group.add(player.shot())player.cooling_time = 20if player.cooling_time > 0:player.cooling_time -= 1if (score_1 + score_2) < 500:background = bg_1elif (score_1 + score_2) < 1500:background = bg_2else:background = bg_3# --向下移动背景图实现飞船向上移动的效果screen.blit(background, (0, -background.get_rect().height + bg_move_dis))screen.blit(background, (0, bg_move_dis))bg_move_dis = (bg_move_dis + 2) % background.get_rect().height# --⽣成⼩⾏星if asteroid_ticks == 0:asteroid_ticks = 90asteroid_group.add(Asteroid(cfg))else:asteroid_ticks -= 1# --画飞船for player in player_group:if pygame.sprite.spritecollide(player, asteroid_group, True, None): player.explode_step = 1explosion_sound.play()elif player.explode_step > 0:if player.explode_step > 3:player_group.remove(player)if len(player_group) == 0:returnelse:player.explode(screen)else:player.draw(screen)# --画⼦弹for bullet in bullet_group:bullet.move()if pygame.sprite.spritecollide(bullet, asteroid_group, True, None): bullet_group.remove(bullet)if bullet.player_idx == 1:score_1 += 1else:score_2 += 1else:bullet.draw(screen)# --画⼩⾏星for asteroid in asteroid_group:asteroid.move()asteroid.rotate()asteroid.draw(screen)# --显⽰分数score_1_text = '玩家⼀得分: %s' % score_1score_2_text = '玩家⼆得分: %s' % score_2text_1 = font.render(score_1_text, True, (0, 0, 255))text_2 = font.render(score_2_text, True, (255, 0, 0))screen.blit(text_1, (2, 5))screen.blit(text_2, (2, 35))# --屏幕刷新pygame.display.update()clock.tick(60)'''主函数'''def main():pygame.init()pygame.font.init()pygame.mixer.init()screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('飞机⼤战 —— 九歌')num_player = StartInterface(screen, cfg)if num_player == 1:while True:GamingInterface(num_player=1, screen=screen)EndInterface(screen, cfg)else:while True:GamingInterface(num_player=2, screen=screen)EndInterface(screen, cfg)'''run'''if __name__ == '__main__':main()5、打地⿏源码分享:import cfgimport sysimport pygameimport randomfrom modules import *'''游戏初始化'''def initGame():pygame.init()pygame.mixer.init()screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('打地⿏ —— 九歌')'''主函数'''def main():# 初始化screen = initGame()# 加载背景⾳乐和其他⾳效pygame.mixer.music.load(cfg.BGM_PATH)pygame.mixer.music.play(-1)audios = {'count_down': pygame.mixer.Sound(cfg.COUNT_DOWN_SOUND_PATH), 'hammering': pygame.mixer.Sound(cfg.HAMMERING_SOUND_PATH)}# 加载字体font = pygame.font.Font(cfg.FONT_PATH, 40)# 加载背景图⽚bg_img = pygame.image.load(cfg.GAME_BG_IMAGEPATH)# 开始界⾯startInterface(screen, cfg.GAME_BEGIN_IMAGEPATHS)# 地⿏改变位置的计时hole_pos = random.choice(cfg.HOLE_POSITIONS)change_hole_event = EREVENTpygame.time.set_timer(change_hole_event, 800)# 地⿏mole = Mole(cfg.MOLE_IMAGEPATHS, hole_pos)# 锤⼦hammer = Hammer(cfg.HAMMER_IMAGEPATHS, (500, 250))# 时钟clock = pygame.time.Clock()# 分数your_score = 0flag = False# 初始时间init_time = pygame.time.get_ticks()# 游戏主循环while True:# --游戏时间为60stime_remain = round((61000 - (pygame.time.get_ticks() - init_time)) / 1000.) # --游戏时间减少, 地⿏变位置速度变快if time_remain == 40 and not flag:hole_pos = random.choice(cfg.HOLE_POSITIONS)mole.reset()mole.setPosition(hole_pos)pygame.time.set_timer(change_hole_event, 650)flag = Trueelif time_remain == 20 and flag:hole_pos = random.choice(cfg.HOLE_POSITIONS)mole.reset()mole.setPosition(hole_pos)pygame.time.set_timer(change_hole_event, 500)flag = False# --倒计时⾳效if time_remain == 10:audios['count_down'].play()# --游戏结束if time_remain < 0: breakcount_down_text = font.render('Time: '+str(time_remain), True, cfg.WHITE) # --按键检测for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.MOUSEMOTION:hammer.setPosition(pygame.mouse.get_pos())elif event.type == pygame.MOUSEBUTTONDOWN:if event.button == 1:hammer.setHammering()elif event.type == change_hole_event:hole_pos = random.choice(cfg.HOLE_POSITIONS)mole.reset()mole.setPosition(hole_pos)# --碰撞检测if hammer.is_hammering and not mole.is_hammer:is_hammer = pygame.sprite.collide_mask(hammer, mole)if is_hammer:audios['hammering'].play()mole.setBeHammered()your_score += 10# --分数your_score_text = font.render('Score: '+str(your_score), True, cfg.BROWN) # --绑定必要的游戏元素到屏幕(注意顺序)screen.blit(bg_img, (0, 0))screen.blit(count_down_text, (875, 8))screen.blit(your_score_text, (800, 430))mole.draw(screen)hammer.draw(screen)# --更新pygame.display.flip()# 读取最佳分数(try块避免第⼀次游戏⽆.rec⽂件)try:best_score = int(open(cfg.RECORD_PATH).read())except:best_score = 0# 若当前分数⼤于最佳分数则更新最佳分数if your_score > best_score:f = open(cfg.RECORD_PATH, 'w')f.write(str(your_score))f.close()# 结束界⾯score_info = {'your_score': your_score, 'best_score': best_score}is_restart = endInterface(screen, cfg.GAME_END_IMAGEPATH, cfg.GAME_AGAIN_IMAGEPATHS, score_info, cfg.FONT_PATH, [cfg.WHITE, cfg.RED], cfg.SCREENSIZE) return is_restart'''run'''if __name__ == '__main__':while True:is_restart = main()if not is_restart:break6、⼩恐龙玩法:上下控制起跳躲避源码分享:import cfgimport sysimport randomimport pygamefrom modules import *'''main'''def main(highest_score):# 游戏初始化pygame.init()screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('九歌')# 导⼊所有声⾳⽂件sounds = {}for key, value in cfg.AUDIO_PATHS.items():sounds[key] = pygame.mixer.Sound(value)# 游戏开始界⾯GameStartInterface(screen, sounds, cfg)# 定义⼀些游戏中必要的元素和变量score = 0score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(534, 15), bg_color=cfg.BACKGROUND_COLOR)highest_score = highest_scorehighest_score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(435, 15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True)dino = Dinosaur(cfg.IMAGE_PATHS['dino'])ground = Ground(cfg.IMAGE_PATHS['ground'], position=(0, cfg.SCREENSIZE[1]))cloud_sprites_group = pygame.sprite.Group()cactus_sprites_group = pygame.sprite.Group()ptera_sprites_group = pygame.sprite.Group()add_obstacle_timer = 0score_timer = 0# 游戏主循环clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE or event.key == pygame.K_UP:dino.jump(sounds)elif event.key == pygame.K_DOWN:dino.duck()elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:dino.unduck()screen.fill(cfg.BACKGROUND_COLOR)# --随机添加云if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10:cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75))))# --随机添加仙⼈掌/飞龙add_obstacle_timer += 1if add_obstacle_timer > random.randrange(50, 150):add_obstacle_timer = 0random_value = random.randrange(0, 10)if random_value >= 5 and random_value <= 7:cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))else:position_ys = [cfg.SCREENSIZE[1]*0.82, cfg.SCREENSIZE[1]*0.75, cfg.SCREENSIZE[1]*0.60, cfg.SCREENSIZE[1]*0.20] ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys))))# --更新游戏元素dino.update()ground.update()cloud_sprites_group.update()cactus_sprites_group.update()ptera_sprites_group.update()score_timer += 1if score_timer > (cfg.FPS//12):score_timer = 0score += 1score = min(score, 99999)if score > highest_score:highest_score = scoreif score % 100 == 0:sounds['point'].play()if score % 1000 == 0:ground.speed -= 1for item in cloud_sprites_group:item.speed -= 1for item in cactus_sprites_group:item.speed -= 1for item in ptera_sprites_group:item.speed -= 1# --碰撞检测for item in cactus_sprites_group:if pygame.sprite.collide_mask(dino, item):dino.die(sounds)for item in ptera_sprites_group:if pygame.sprite.collide_mask(dino, item):dino.die(sounds)# --将游戏元素画到屏幕上dino.draw(screen)ground.draw(screen)cloud_sprites_group.draw(screen)cactus_sprites_group.draw(screen)ptera_sprites_group.draw(screen)score_board.set(score)highest_score_board.set(highest_score)score_board.draw(screen)highest_score_board.draw(screen)# --更新屏幕pygame.display.update()clock.tick(cfg.FPS)# --游戏是否结束if dino.is_dead:break# 游戏结束界⾯return GameEndInterface(screen, cfg), highest_score'''run'''if __name__ == '__main__':highest_score = 0while True:flag, highest_score = main(highest_score)if not flag: break7、消消乐玩法:三个相连就能消除源码分享:import osimport sysimport cfgimport pygamefrom modules import *'''游戏主程序'''def main():pygame.init()screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('Gemgem —— 九歌')# 加载背景⾳乐pygame.mixer.init()pygame.mixer.music.load(os.path.join(cfg.ROOTDIR, "resources/audios/bg.mp3"))pygame.mixer.music.set_volume(0.6)pygame.mixer.music.play(-1)# 加载⾳效sounds = {}sounds['mismatch'] = pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/badswap.wav'))sounds['match'] = []for i in range(6):sounds['match'].append(pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/match%s.wav' % i))) # 加载字体font = pygame.font.Font(os.path.join(cfg.ROOTDIR, 'resources/font/font.TTF'), 25)# 图⽚加载gem_imgs = []for i in range(1, 8):gem_imgs.append(os.path.join(cfg.ROOTDIR, 'resources/images/gem%s.png' % i))# 主循环game = gemGame(screen, sounds, font, gem_imgs, cfg)while True:score = game.start()flag = False# ⼀轮游戏结束后玩家选择重玩或者退出while True:for event in pygame.event.get():if event.type == pygame.QUIT or (event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE): pygame.quit()sys.exit()elif event.type == pygame.KEYUP and event.key == pygame.K_r:flag = Trueif flag:breakscreen.fill((135, 206, 235))text0 = 'Final score: %s' % scoretext1 = 'Press <R> to restart the game.'text2 = 'Press <Esc> to quit the game.'y = 150for idx, text in enumerate([text0, text1, text2]):text_render = font.render(text, 1, (85, 65, 0))rect = text_render.get_rect()if idx == 0:rect.left, rect.top = (212, y)elif idx == 1:rect.left, rect.top = (122.5, y)else:rect.left, rect.top = (126.5, y)y += 100screen.blit(text_render, rect)pygame.display.update()game.reset()'''run'''if __name__ == '__main__':main()8、俄罗斯⽅块玩法:童年经典,普通模式没啥意思,⼩时候我们都是玩加速的。

MATLAB课程设计

MATLAB课程设计

MATLAB课程设计课程设计(论文)题目:用MATLAB语言程序开发凑五子棋游戏专业:信息与计算科学指导教师:张大海学生姓名:谢艳涛班级-学号:信计131-30学生姓名:黄元福班级-学号:信计131-26学生姓名:辛安班级-学号:信计131-222016年 11月摘要凑五子棋是一种两人对弈的纯策略型棋类游戏,应用MATLAB语言编写程序可以在计算机上实现二人对弈凑五子棋功能。

二人对弈凑五子棋程序由欢迎界面显示、游戏界面生成、光标移动与落子、判断胜负、悔棋功能、提供音效等子程序构成;程序中应用了结构体、数组、全局变量、按键处理和图形编程等元素和语句。

程序通过棋盘和棋子图像生成、二人移子与落子和判断胜负等功能的实现,在计算机上实现了二人凑五子棋对弈。

目录摘要-------------------------------------------------- II 第1章:需求分析 ---------------------------------------- 11.1凑五子棋背景 ----------------------------------- 11.2 凑五子棋需求分析和流程设计--------------------- 1 第2章:概要设计 ---------------------------------------- 72.1 各类头文件和全局变量--------------------------- 72.2 画面显示模块----------------------------------- 8 第3章:详细设计 --------------------------------------- 103.1 玩家操作模块---------------------------------- 103.2音效提供模块 ---------------------------------- 113.3 胜负判断模块---------------------------------- 11 第4章:调试分析 --------------------------------------- 124.1 图形模块-------------------------------------- 12 4.2 玩家操作模块 ------------------------------------ 134.3 胜负判断模块---------------------------------- 14 第5章:用户手册 --------------------------------------- 14第6章:小组分工 --------------------------------------- 15 第7章:结论与心得 ------------------------------------- 16 第8章:源程序代码 ------------------------------------ 16第1章:需求分析1.1凑五子棋背景传统凑五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为18×18,棋子放置于棋盘线交叉点上。

matlab有趣的代码

matlab有趣的代码

matlab有趣的代码Matlab是一种用于科学计算和数据可视化的强大工具。

它不仅可以解决数学问题,还可以进行图像处理、信号处理、机器学习等等。

在这篇文章中,我将为大家介绍一些有趣的Matlab代码,并解释它们的功能和应用。

1. "音乐可视化" - 利用Matlab可以将音频信号转换为可视化效果。

你可以使用Matlab的音频处理库来读取音频文件,并将其转换为时域或频域信号。

然后,你可以使用Matlab的绘图功能将这些信号可视化成波形图或频谱图。

2. "图像滤镜效果" - Matlab提供了丰富的图像处理工具箱,可以实现各种有趣的图像滤镜效果。

比如,你可以使用Matlab的边缘检测算法来突出图像的边缘特征,或者使用模糊滤镜来模糊图像。

这些滤镜效果可以使图像更加有趣和艺术化。

3. "模拟物理实验" - Matlab可以用来模拟各种物理实验,比如弹簧振子、摆钟等。

你可以使用Matlab的数值计算功能来解决物理方程,并使用Matlab的绘图功能将模拟结果可视化。

这样,你就可以通过代码实现自己的物理实验,并观察其行为和变化。

4. "游戏开发" - Matlab不仅可以用于科学计算和数据处理,还可以用于游戏开发。

你可以使用Matlab的图形库来创建简单的游戏界面,并使用Matlab的控制语句和逻辑运算来实现游戏的逻辑。

这样,你就可以通过编写Matlab代码来开发自己的小游戏。

5. "数据可视化" - Matlab提供了丰富的绘图和可视化工具,可以帮助你更好地理解和展示数据。

你可以使用Matlab的绘图函数来绘制各种统计图表,比如柱状图、折线图、散点图等。

这些图表可以帮助你更直观地理解数据的分布和趋势。

6. "机器学习应用" - Matlab提供了强大的机器学习工具箱,可以帮助你构建和训练机器学习模型。

Python小游戏代码

Python小游戏代码

Python5个小游戏代码1. 猜数字游戏import randomdef guess_number():random_number = random.randint(1, 100)attempts = 0while True:user_guess = int(input("请输入一个1到100之间的数字:"))attempts += 1if user_guess > random_number:print("太大了,请再试一次!")elif user_guess < random_number:print("太小了,请再试一次!")else:print(f"恭喜你,猜对了!你用了{attempts}次尝试。

")breakguess_number()这个猜数字游戏的规则很简单,程序随机生成一个1到100之间的数字,然后玩家通过输入猜测的数字来与随机数进行比较。

如果猜测的数字大于或小于随机数,程序会给出相应的提示。

直到玩家猜对为止,程序会显示恭喜消息,并告诉玩家猜对所用的尝试次数。

2. 石头、剪刀、布游戏import randomdef rock_paper_scissors():choices = ['石头', '剪刀', '布']while True:user_choice = input("请选择(石头、剪刀、布):")if user_choice not in choices:print("无效的选择,请重新输入!")continuecomputer_choice = random.choice(choices)print(f"你选择了:{user_choice}")print(f"电脑选择了:{computer_choice}")if user_choice == computer_choice:print("平局!")elif (user_choice == '石头' and computer_choice == '剪刀') or \(user_choice == '剪刀' and computer_choice == '布') or \(user_choice == '布' and computer_choice == '石头'):print("恭喜你,你赢了!")else:print("很遗憾,你输了!")play_again = input("再玩一局?(是/否)")if play_again.lower() != "是" and play_again.lower() != "yes":print("游戏结束。

2048游戏matlab代码

2048游戏matlab代码

说明:本代码为2048嬉戏matlab代码,程序未进行嬉戏结束判定,节目如下。

function g2048(action)global totalscore flag score_boardif nargin<1figure_h=figure;set(figure_h,'Units','points')set(figure_h,'UserData',figure_h);totalscore=0;flag=0;score_board=zeros(1,16);action='initialize';endswitch actioncase'initialize';figure_h=get(gcf,'UserData');set(figure_h,...'Color',[0.4 0.4 0.4],...'Menubar','none',...'Name','2048',...'NumberTitle','off',...'Position',[200 200 320 355],...'Resize','off');axis('off')game_score=uicontrol(figure_h,...'BackgroundColor',[1 1 1],...'ForegroundColor',[0 0 0], ...'HorizontalAlignment','center',...'FontSize',12,...'Units','points',...'Position',[235 305 65 30],...'String','Score',...'Style','edit',...'Tag','game_score');new_game_h=uicontrol(figure_h,...'Callback','g2048 restart',...'FontSize',12, ...'Units','points',...'Position',[35 30 65 30],...'String','New Game',...'Style','pushbutton');% closeclose_h=uicontrol(figure_h,...'Callback','close(gcf)',...'Fontsize',12, ...'Units','points',...'Position',[225 30 65 30],...'String','Close',...'Style','pushbutton');% rightmove_right=uicontrol(figure_h,...'Callback','g2048 right',...'Fontsize',12, ...'Units','points',...'Position',[255 185 60 30],...'String','Right',...'Style','pushbutton');% leftmove_left=uicontrol(figure_h,...'Callback','g2048 left',...'Fontsize',12, ...'Units','points',...'Position',[5 185 60 30],...'String','Left',...'Style','pushbutton');% upmove_up=uicontrol(figure_h,...'Callback','g2048 up',...'Fontsize',12, ...'Units','points',...'Position',[130 300 60 30],...'String','Up',...'Style','pushbutton');% downmove_down=uicontrol(figure_h,...'Callback','g2048 down',...'Fontsize',12, ...'Units','points',...'Position',[130 80 60 30],...'String','Down',...'Style','pushbutton');% setup the game boardirows=1;for counter=1:16jcols=rem(counter,4);if jcols==0j cols=4;endposition=[40*jcols+40 85+40*irows 40 40]; index=(irows-1)*4+jcols;if jcols==4i rows=irows+1;endboard.squares(index)=uicontrol(figure_h,...'FontSize',18,...'FontWeight','bold',...'Units','points',...'Position',position,...'Style','pushbutton',...'Tag',num2str(index));endset(figure_h,'userdata',board);g2048('restart')case'restart'totalscore=0;score_board=zeros(1,16);g2048('addnum') ;g2048('addnum') ;g2048('show')case'show'num_0=find(score_board==0);board=get(gcf,'UserData');set(board.squares,{'string'},num2cell(score_board)')set(board.squares,...'BackgroundColor',[0.701961 0.701961 0.701961],...'Enable','on',...'Visible','on')set(board.squares(num_0),...'BackgroundColor','black',...'Enable','off',...'String',' ');score_handle=findobj(gcf,'Tag','game_score');s et(score_handle,...'String',num2str(totalscore),...'Tag','game_score');case'down'C=score_board;for i=1:4A=[score_board(i) score_board(i+4) score_board(i+8) score_board(i+12)];[B score]=move(A);score_board(i)=B(1); score_board(i+4)=B(2);score_board(i+8)=B(3); score_board(i+12)=B(4);totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase'up'C=score_board;for i=13:16A=[score_board(i) score_board(i-4) score_board(i-8) score_board(i-12)];[B score]=move(A);score_board(i)=B(1); score_board(i-4)=B(2);score_board(i-8)=B(3); score_board(i-12)=B(4);totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase'right'C=score_board;for i=4:4:16A=[score_board(i) score_board(i-1) score_board(i-2) score_board(i-3)];[B score]=move(A);score_board(i)=B(1); score_board(i-1)=B(2);score_board(i-2)=B(3); score_board(i-3)=B(4);totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase'left'C=score_board;for i=1:4:13A=[score_board(i) score_board(i+1) score_board(i+2) score_board(i+3)];[B score]=move(A);score_board(i)=B(1); score_board(i+1)=B(2);score_board(i+2)=B(3); score_board(i+3)=B(4);totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase'addnum'num_0=find(score_board==0);l=length(num_0);if l>0score_board(num_0(ceil(l*rand)))=2+2*(rand<0.1);endendendfunction Y=addnum(X)num_0=find(X==0);l=length(num_0);X(num_0(ceil(l*rand)))=2+2*(rand<0.1);Y=X;endfunction [B score]=move(A)score=0;for k=1:2for i=1:3if A(i)==0for j=i:3A(j)=A(j+1);endA(4)=0;endendendif A(1)==A(2)if A(3)==A(4)A(1)=A(1)+A(2);A(2)=A(3)+A(4);A(3)=0;A(4)=0;score=A(1)+A(2);else A(1)=A(1)+A(2);A(2)=A(3);A(3)=A(4);A(4)=0;score=A(1);endelse if A(2)==A(3)A(1)=A(1);A(2)=A(2)+A(3);A(3)=A(4);A(4)=0;score=A(2);else if A(3)==A(4)A(1)=A(1);A(2)=A(2);A(3)=A(3)+A(4);A(4)=0;score=A(3);else score=0;endendendB=A;end。

matlab课程设计报告模板俄罗斯方块

matlab课程设计报告模板俄罗斯方块

matlab课程设计报告模板俄罗斯方块
一.需求分析
在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的
首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认
可,因此开发此游戏软件可满足人们的一些娱乐的需求。

此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游
戏。

二,系统运行环境
操作系统选择Windows XP版本,运行环境选择MyEclipse
三.系统功能需求描述
俄罗斯方块游戏是-款适合大众的游戏软件,它适合不同年龄的人玩。

本软件要实现的功能如下:
1.游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。

2.游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。

3.级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏速度越快,难度越大。

四,总体设计
游戏中玩家可以做的操作有:
1.以90度为单位旋转方每一格块。

2.以格子为单位左右移动方块,让方块加速落下。

3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。

4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。

同时删除的列数越多,得分指数上升。

5.当固定的方块堆到区域最上方,则游戏结束。

五.系统结构图
六.程序模块设计。

matlab编程(五子棋)[整理版]

matlab编程(五子棋)[整理版]

function five() M文件的一种类型,以function开启的函数文件,另一种是把一系列命令结合在一起的一般M文件figure(1) 创建一个新的图形对象axis([0 12 0 12]); 坐标轴范围控制命令,axis([xmin xmax ymin ymax])用于设置图表各坐标轴的刻度范围hold on 图形保持功能,当前坐标轴和图形都将保持,此后绘制的图形都将添加在这个图形之上,并且自动调整坐标轴的范围axis off 取消坐标轴背景,在运行的图中不显示坐标for i = 1:11 a:b:c第一个为起始值,第二个为增量(增量为1,冒号省略),第三个为结束值line([1 11],[i i]); 画网格line([1,2],[3,4])将画出(1,3)到(2,4)的一条直线line([i i],[1 11]);endaxis equal 横纵坐标使用相同的刻度(使每一个格子成为正方形)qishou = 1; 判断棋手的颜色,开始的时候是红色,取0时是黑色boardstatus = zeros(10); 棋盘状态gt矩阵,取0为空,取1为黑,取2为红zeros(10)将画出10*10的零阵,代表棋盘上的100个位置while 1hold onposflag = 1; 用于判断下的棋是否有效,取1说明下的棋无效,要重新下while posflag[xpos,ypos] = ginput(1); 能从当前的坐标中读取n个点并返回这n个点的x,y坐标,均为n x1向量,程序运行时,在界面鼠标会以一个十字线移动,便是ginput(x)的功能 xpos = 0.5*(floor(xpos)+ceil(xpos)); x,y为圆心,floor(x)地板函数,即舍去正小数至最近整数 ypos = 0.5*(floor(ypos)+ceil(ypos)); ceil(x)天花板函数,即加入正小数至最近整数,例如x=9.5,floo(x)=9,ceil(x)=10 if xpos<=0.5||xpos>=11||ypos<=0.5||ypos>=11 点到棋盘外了,回到上面的循环continueendfor n=1:10 判断棋子是否下到边界,若在边线上,判断无效,继续if xpos==n||ypos==ncontinueendrx = floor(xpos); boardstatus是10*10零阵从1*1开始,所以用floor函数 ry = floor(ypos);if boardstatus(rx,ry)==1||boardstatus(rx,ry)==2 该位置已经有棋子continue; 回到上面的循环endposflag = 0; 跳出循环endif qishou==1drawthego(xpos,ypos,qishou);boardstatus(rx,ry)=1; 此空为红棋qishou = 0; 轮到黑棋下elsedrawthego(xpos,ypos,qishou);boardstatus(rx,ry)=2; 此空位黑棋qishou = 1; 轮到红棋下endif iswin(boardstatus,rx,ry)==1if qishou==1winmsg = '黑棋连成了五颗,黑棋胜!';elsewinmsg = '红棋连成了五颗,红棋胜!';endif iswin(boardstatus,rx,ry)==2winmsg = '和棋';msgbox(winmsg) msgbox(Message) 创建一个对话框,根据figure窗体大小自动将Message换行。

matlab小游戏课程设计

matlab小游戏课程设计

matlab小游戏课程设计一、课程目标知识目标:1. 学生能理解Matlab的基本操作,包括变量定义、运算符使用和程序流程控制。

2. 学生能够运用Matlab编写简单的交互式小游戏,如猜数字、迷宫等。

3. 学生掌握Matlab中绘图和动画功能,实现对游戏结果的展示。

技能目标:1. 学生培养编程思维,学会运用Matlab解决实际问题。

2. 学生能够运用所学知识,设计并实现具有简单逻辑和交互功能的Matlab小游戏。

3. 学生通过团队协作,提高沟通与协作能力。

情感态度价值观目标:1. 学生培养对计算机编程的兴趣,提高学习积极性。

2. 学生在游戏设计和实现过程中,培养创新精神和实践能力。

3. 学生通过游戏编程,体验团队合作的重要性,树立正确的价值观。

本课程针对高中年级学生,结合Matlab编程知识,以趣味性小游戏为载体,激发学生兴趣,培养编程技能和团队协作能力。

课程要求学生在理解基本编程知识的基础上,动手实践,实现具体的学习成果。

通过本课程的学习,使学生能够更好地掌握Matlab编程技能,提高解决实际问题的能力。

二、教学内容1. Matlab基础知识回顾:变量定义、数据类型、运算符、程序流程控制(条件语句、循环语句)。

2. Matlab绘图与动画:二维绘图、三维绘图、动画制作。

3. 简单交互式小游戏设计:- 猜数字游戏:随机生成一个数字,学生编写程序实现用户输入猜测,程序给出提示的功能。

- 迷宫游戏:设计一个简单迷宫,编写程序实现角色移动、碰撞检测和路径寻找。

4. 团队项目实践:学生分组设计并实现一个Matlab小游戏,要求包含交互、绘图和动画功能。

教学内容安排与进度:第一课时:Matlab基础知识回顾。

第二课时:Matlab绘图与动画。

第三课时:简单交互式小游戏设计(猜数字游戏)。

第四课时:简单交互式小游戏设计(迷宫游戏)。

第五课时:团队项目实践。

本教学内容基于Matlab编程知识,结合课程目标,制定详细的教学大纲。

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

MATLAB游戏程序目录1.空格游戏 (2)2.华容道 (3)3.凑五子棋 (14)4.2048 (19)5.俄罗斯方块 (24)1.空格游戏function pintu1()A = gen();G = [1 2 3;4 5 6;7 8 0];drawmap(A);while 1[xpos,ypos] = ginput(1);col = ceil(xpos);row = 3-ceil(ypos)+1;num = A(row,col);if row>1&A(row-1,col)==0A(row-1,col) = num;A(row,col) = 0;endif row<3&A(row+1,col)==0A(row+1,col) = num;A(row,col) = 0;endif col>1&A(row,col-1)==0A(row,col-1) = num;A(row,col) = 0;endif col<3&A(row,col+1)==0A(row,col+1) = num;A(row,col) = 0;enddrawmap(A)zt = abs(A-G);if sum(zt(:))==0msgbox('恭喜您成功完成!')breakendendfunction drawmap(A)clf;hold online([0 3],[0 0],'linewidth',4);line([3 3],[0 3],'linewidth',4);line([0 3],[3 3],'linewidth',4);line([0 0],[0 3],'linewidth',4);for i = 1:3for j = 1:3drawrect([j-1 3-i],[j 3-i],[j 3-i+1],[j-1 3-i+1],'y',A(i,j));endendaxis equalaxis offfunction drawrect(x1,x2,x3,x4,color,num)x = [x1(1) x2(1) x3(1) x4(1)];y = [x1(2) x2(2) x3(2) x4(2)];fill(x,y,color)if num==0text(0.5*(x1(1)+x2(1)),0.5*(x1(2)+x4(2)),' ','fontsize',24)elsetext(0.5*(x1(1)+x2(1))-0.05,0.5*(x1(2)+x4(2)),num2str(num),'fontsize',24) endfunction y = gen()y = inf*ones(1,9);for i = 1:9while 1a = randint(1,1,9);if isempty(find(y==a))y(i) = a;breakendendendy = reshape(y,3,3);2.华容道function huarongdao()A = [2 1 1 3;2 1 1 3;4 6 6 5;4 7 7 5;7 0 0 7];drawmap(A)while 1if A(5,2)==1&A(5,3)==1ch = menu('曹操成功逃出华容道!如果要继续玩,按“是”,否则按“否”','是','否');switch chcase 1huarongdao();case 2returnendend[xpos,ypos] = ginput(1);col = ceil(xpos);row = 5-ceil(ypos)+1;juese = A(row,col);switch juesecase 1%点击了曹操[I,J] = find(A==1);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[1;1];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[1;1];A([rn,rm],ln)=[0;0];drawmap(A)end%判断是否能向下移if rn>1&isequalm(A(rn-1,[ln,lm]),[0,0])A(rn-1,[ln,lm])=[1,1];A(rn+1,[ln,lm])=[0,0];drawmap(A)end%判断是否能向上移if rm<5&isequalm(A(rm+1,[ln,lm]),[0,0])A(rm+1,[ln,lm])=[1,1];A(rm-1,[ln,lm])=[0,0];drawmap(A)endcase 2% 点击了黄忠[I,J] = find(A==2);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[2;2];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[2;2];A([rn,rm],ln)=[0;0];drawmap(A)endif rn>1&A(rn-1,ln)==0if rm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch = menu('请选择移到的方向:','上','下')switch chcase 1%上移A(rn-1,ln) = 2;A(rn+1,ln) = 0;drawmap(A)case 2%下移A(rm+1,ln) = 2;A(rm-1,ln) = 0;drawmap(A)endelse%只能上移A(rn-1,ln) = 2;A(rn+1,ln) = 0;drawmap(A)endelseif rm<5&A(rm+1,ln)==0A(rm+1,ln) = 2;A(rm-1,ln) = 0;drawmap(A)endcase 3%张飞[I,J] = find(A==3);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[3;3];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[3;3];A([rn,rm],ln)=[0;0];drawmap(A)endif rn>1&A(rn-1,ln)==0if rm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch = menu('请选择移到的方向:','上','下')switch chcase 1%上移A(rn-1,ln) = 3;A(rn+1,ln) = 0;drawmap(A)case 2%下移A(rm+1,ln) = 3;A(rm-1,ln) = 0;endelse%只能上移A(rn-1,ln) = 3;A(rn+1,ln) = 0;drawmap(A)endelseif rm<5&A(rm+1,ln)==0A(rm+1,ln) = 3;A(rm-1,ln) = 0;drawmap(A)endcase 4%马超[I,J] = find(A==4);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[4;4];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[4;4];A([rn,rm],ln)=[0;0];drawmap(A)endif rn>1&A(rn-1,ln)==0if rm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch = menu('请选择移到的方向:','上','下')switch chcase 1%上移A(rn-1,ln) = 4;A(rn+1,ln) = 0;drawmap(A)case 2%下移A(rm+1,ln) = 4;drawmap(A)endelse%只能上移A(rn-1,ln) = 4;A(rn+1,ln) = 0;drawmap(A)endelseif rm<5&A(rm+1,ln)==0A(rm+1,ln) = 4;A(rm-1,ln) = 0;drawmap(A)endcase 5%赵云[I,J] = find(A==5);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[5;5];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[5;5];A([rn,rm],ln)=[0;0];drawmap(A)endif rn>1&A(rn-1,ln)==0if rm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch = menu('请选择移到的方向:','上','下')switch chcase 1%上移A(rn-1,ln) = 5;A(rn+1,ln) = 0;drawmap(A)case 2%下移A(rm-1,ln) = 0;drawmap(A)endelse%只能上移A(rn-1,ln) = 5;A(rn+1,ln) = 0;drawmap(A)endelseif rm<5&A(rm+1,ln)==0A(rm+1,ln) = 5;A(rm-1,ln) = 0;drawmap(A)endcase 6%关羽[I,J] = find(A==6);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向上移if rn>1 & isequalm(A(rn-1,[ln,lm]),[0,0])A(rn-1,[ln,lm])=[6,6];A(rn,[ln,lm])=[0,0];drawmap(A)end%判断是否能向下移if rm<5&isequalm(A(rm+1,[ln,lm]),[0,0])A(rm+1,[ln,lm])=[6,6];A(rm,[ln,lm])=[0,0];drawmap(A)endif ln>1&A(rn,ln-1)==0if lm<4&A(rm,lm+1)==0%如果又能左移又能右移,则要点击的部位ch = menu('请选择移到的方向:','左','右')switch chcase 1%左移A(rm,ln-1) = 6;A(rm,ln+1) = 0;drawmap(A)case 2%右移A(rm,lm+1) = 6;A(rm,lm-1) = 0;drawmap(A)endelse%只能左移A(rm,ln-1) = 6;A(rm,ln+1) = 0;drawmap(A)endelseif lm<4&A(rm,lm+1)==0A(rm,lm+1) = 6;A(rm,lm-1) = 0;drawmap(A)endcase 7 %小卒if row>1&A(row-1,col)==0 % 上if col>1&A(row,col-1)==0 % 左ch = menu('请选择移到的方向:','上','左')switch chcase 1A(row-1,col) = 7;A(row,col) = 0;drawmap(A)case 2A(row,col-1) = 7;A(row,col) = 0;drawmap(A)endelseif row<5&A(row+1,col)==0% 下ch = menu('请选择移到的方向:','上','下')switch chcase 1A(row-1,col) = 7;A(row,col) = 0;drawmap(A)case 2A(row+1,col) = 7;A(row,col) = 0;drawmap(A)endelseif col<4&A(row,col+1)==0 %右ch = menu('请选择移到的方向:','上','右')switch chcase 1A(row-1,col) = 7;A(row,col) = 0;drawmap(A)case 2A(row,col+1) = 7;A(row,col) = 0;drawmap(A)endelse %只能向上A(row-1,col) = 7;A(row,col) = 0;drawmap(A)endelseif col>1&A(row,col-1)==0%左if row<5&A(row+1,col)==0%下ch = menu('请选择移到的方向:','左','下')switch chcase 1A(row,col-1) = 7;A(row,col) = 0;drawmap(A)case 2A(row+1,col) = 7;A(row,col) = 0;drawmap(A)endelseif col<4&A(row,col+1)==0%右ch = menu('请选择移到的方向:','左','右')switch chcase 1A(row,col-1) = 7;A(row,col) = 0;drawmap(A)case 2A(row,col+1) = 7;A(row,col) = 0;drawmap(A)endelse%只能向左A(row,col-1) = 7;A(row,col) = 0;drawmap(A)endelseif row<5&A(row+1,col)==0%下if col<4&A(row,col+1)==0%右ch = menu('请选择移到的方向:','下','右')switch chcase 1A(row+1,col) = 7;A(row,col) = 0;drawmap(A)case 2A(row,col+1) = 7;A(row,col) = 0;drawmap(A)endelse%只能向下A(row+1,col) = 7;A(row,col) = 0;drawmap(A)endelseif col<4&A(row,col+1)==0%只能向右A(row,col+1) = 7;A(row,col) = 0;drawmap(A)endendendfunction drawmap(A)clfhold on%曹操[I J] = find(A==1);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'r')text(0.5*(x1+x2)-0.5,0.5*(y1+y2),'曹操','fontsize',28)% 黄忠[I,J] = find(A==2);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y1),'黄','fontsize',28) text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y2),'忠','fontsize',28)% 张飞[I,J] = find(A==3);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y1),'张','fontsize',28) text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y2),'飞','fontsize',28)% 马超[I,J] = find(A==4);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y1),'马','fontsize',28) text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y2),'超','fontsize',28)% 赵云[I,J] = find(A==5);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y1),'赵','fontsize',28) text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y2),'云','fontsize',28)% 关羽[I,J] = find(A==6);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+0.5*(x1+x2))-0.26,0.5*(y1+y2),'关','fontsize',28) text(0.5*(0.5*(x1+x2)+x2)-0.26,0.5*(y1+y2),'羽','fontsize',28)%小卒[I,J] = find(A==7);for i = 1:length(I)x1 = J(i)-1;x2 = J(i);y1 = 5-(I(i)-1);y2 = 5-I(i);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'g')text(0.5*(x1+x2)-0.26,0.5*(y1+y2),'卒','fontsize',28)end% 画背景line([0 4],[0 0],'color','b','linewidth',4)line([0 4],[5 5],'color','b','linewidth',4)line([0 0],[0 5],'color','b','linewidth',4)line([4 4],[0 5],'color','b','linewidth',4)for i = 1:4line([0 4],[i i],'color','b','linestyle','--')endfor i = 1:3line([i i],[0 5],'color','b','linestyle','--')endaxis equalaxis([0 4 0 5])axis offfunction drawrect(x1,x2,x3,x4,color)x = [x1(1) x2(1) x3(1) x4(1)];y = [x1(2) x2(2) x3(2) x4(2)];fill(x,y,color)3.凑五子棋function [ ] = five()global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha sshf=figure('resize','off','name','five',...'position',[360 280 560 420],'numbertitle','off');set(gcf,'menubar','none','color',[0.3 0.3 0.3])set(gca,'position',[0.2300 0.1100 0.7750 0.8150]) set(gca,'xlim',[0,9],'ylim',[0,9])set(ha,'xtick',[],'ytick',[],'box','on')set(ha,'color',[0.7 0.6,0.6])set(ha,'DataAspectRatio',[1 1 1],'PlotBoxAspectRatio',[1 1 1])x=repmat([0;9],1,9);y=[1:9;1:9];line(x,y,'color','k')line(y,x,'color','k')hst=uicontrol('style','text','string','Score','fontsize',30,...'units','normal','position',[0.02,0.55,0.26,0.14],'parent',hf,...'ForegroundColor','w','backgroundcolor',[0.3 0.3 0.3],...'fontweight','bold');hsc=uicontrol('style','text','string','0','fontsize',24,...'units','normal','position',[0.02,0.4,0.26,0.14],'parent',hf,...'ForegroundColor','w','backgroundcolor',[0.3 0.3 0.3],...'fontweight','bold');hbt=uicontrol('style','pushbutton','string','Restart','fontsize',18,...'units','normal','position',[0.02,0.16,0.26,0.14],'parent',hf,...'fontweight','bold','callback',@restart);color=[...1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1;0.7 0.3 0;];h1=annotation('ellipse',[0.04,0.84,0.06,0.08],'facecolor','k');h2=annotation('ellipse',[0.12,0.84,0.06,0.08],'facecolor','k');h3=annotation('ellipse',[0.2,0.84,0.06,0.08],'facecolor','k');set(ha,'buttondownfcn',@select2)initializefunction initialize()global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ssa=zeros(9);h=zeros(9)*NaN;m1=[];n1=[];m2=[];n2=[];ss=0;k=rs(1:81,5);t=ceil(rand(1,5)*7);a(k)=t;[m,n] = ind2sub([9,9],k);y=9.5-m;x=n-0.5;for p=1:5h(k(p))=line(x(p),y(p),'marker','o','markersize',24,...'markerfacecolor',color(t(p),:),'markeredgecolor','none',...'buttondownfcn',@select1);endt=ceil(rand(1,3)*7);set(h1,'facecolor',color(t(1),:))set(h2,'facecolor',color(t(2),:))set(h3,'facecolor',color(t(3),:))function [k]=rs(s,n);for m=1:nt=ceil(rand*length(s));k(m)=s(t);s(t)=[];endfunction select1(src,eventdata)global a h m1 n1n1=ceil(get(src,'xdata'));m1=ceil(9-get(src,'ydata'));set(h(~isnan(h)),'markeredgecolor','none')set(src,'markeredgecolor','w')function select2(src,eventdata)global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ssif isempty(m1) || isempty(n1)returnendcp=get(src,'currentpoint');n2=ceil(cp(1,1));m2=ceil(9-cp(1,2));if a(m2,n2)returnendb=~a;b(m1,n1)=1;b=bwlabel(b,4);if b(m1,n1)~=b(m2,n2)enda(m2,n2)=a(m1,n1);a(m1,n1)=0;h(m2,n2)=h(m1,n1);h(m1,n1)=NaN;set(h(m2,n2),'xdata',n2-0.5,'ydata',9.5-m2,'markeredgecolor','none') m1=[];n1=[];judgement;if sum(sum(~a))<3hgo=text(1,4.5,'Game Over','fontsize',36,'fontweight',...'bold','parent',src);pause(3)delete(hgo);delete(h(~isnan(h)))set(hsc,'string','0')initialize;returnendif ~ssnew;endfunction judgementglobal a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ssb=logical(zeros(9,9));ss=0;left=0;right=0;up=0;down=0;lu=0;rd=0;ld=0;ru=0;while n2-left-1>0 && a(m2,n2-left-1)==a(m2,n2)left=left+1;endwhile n2+right+1<10 && a(m2,n2+right+1)==a(m2,n2)right=right+1;endwhile m2-up-1>0 && a(m2-up-1,n2)==a(m2,n2)up=up+1;endwhile m2+down+1<10 && a(m2+down+1,n2)==a(m2,n2)down=down+1;endwhile n2-lu-1>0 && m2-lu-1>0 && a(m2-lu-1,n2-lu-1)==a(m2,n2) lu=lu+1;endwhile n2+rd+1<10 && m2+rd+1<10 && a(m2+rd+1,n2+rd+1)==a(m2,n2) rd=rd+1;endwhile n2-ld-1>0 && m2+ld+1<10 && a(m2+ld+1,n2-ld-1)==a(m2,n2) ld=ld+1;endwhile n2+ru+1<10 && m2-ru-1>0 && a(m2-ru-1,n2+ru+1)==a(m2,n2) ru=ru+1;endif left+right+1>=5b(m2,n2-left:n2+right)=1;endif up+down+1>=5b(m2-up:m2+down,n2)=1;endif lu+rd+1>=5ind=sub2ind([9,9],m2-lu:m2+rd,n2-lu:n2+rd);b(ind)=1;endif ld+ru+1>=5ind=sub2ind([9,9],m2+ld:-1:m2-ru,n2-ld:n2+ru);b(ind)=1;endif sum(sum(b))a(b)=0;delete(h(b));h(b)=NaN;score=score+sum(sum(b));set(hsc,'string',num2str(score))ss=1;endfunction newglobal a h m1 n1 m2 n2 t h1 h2 h3 color score hsc hak=rs(find(~a),3);a(k)=t;[mt,nt] = ind2sub([9,9],k);y=9.5-mt;x=nt-0.5;for p=1:3h(k(p))=line(x(p),y(p),'marker','o','markersize',24,...'markerfacecolor',color(t(p),:),'markeredgecolor','none',...'buttondownfcn',@select1);endfor p=1:3m2=mt(p);n2=nt(p);judgement;endif sum(sum(~a))==0hgo=text(1,4.5,'Game Over','fontsize',36,'fontweight',...'bold','parent',ha);pause(3)delete(hgo);delete(h(~isnan(h)))set(hsc,'string','0')initialize;returnendt=ceil(rand(1,3)*7);set(h1,'facecolor',color(t(1),:))set(h2,'facecolor',color(t(2),:))set(h3,'facecolor',color(t(3),:))function restart(src,eventdata)global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ssdelete(h(~isnan(h)))set(hsc,'string','0')initialize;4.2048function g2048(action)global totalscore flag score_boardif nargin<1figure_h=figure;set(figure_h,'Units','points')set(figure_h,'UserData',figure_h);totalscore=0;flag=0;score_board=zeros(1,16);action='initialize';endswitch actioncase 'initialize';figure_h=get(gcf,'UserData');set(figure_h,...'Color',[0.4 0.4 0.4],...'Menubar','none',...'Name','2048',...'NumberTitle','off',...'Position',[200 200 320 355],...'Resize','off');axis('off')game_score=uicontrol(figure_h,... 'BackgroundColor',[1 1 1],...'ForegroundColor',[0 0 0], ...'HorizontalAlignment','center',... 'FontSize',12,...'Units','points',...'Position',[235 305 65 30],...'String','Score',...'Style','edit',...'Tag','game_score');new_game_h=uicontrol(figure_h,... 'Callback','g2048 restart',...'FontSize',12, ...'Units','points',...'Position',[35 30 65 30],...'String','New Game',...'Style','pushbutton');% closeclose_h=uicontrol(figure_h,...'Callback','close(gcf)',...'Fontsize',12, ...'Units','points',...'Position',[225 30 65 30],...'String','Close',...'Style','pushbutton');% rightmove_right=uicontrol(figure_h,... 'Callback','g2048 right',...'Fontsize',12, ...'Units','points',...'Position',[255 185 60 30],...'String','Right',...'Style','pushbutton');% leftmove_left=uicontrol(figure_h,...'Callback','g2048 left',...'Fontsize',12, ...'Units','points',...'Position',[5 185 60 30],...'String','Left',...'Style','pushbutton');% upmove_up=uicontrol(figure_h,...'Callback','g2048 up',...'Fontsize',12, ...'Units','points',...'Position',[130 300 60 30],...'String','Up',...'Style','pushbutton');% downmove_down=uicontrol(figure_h,...'Callback','g2048 down',...'Fontsize',12, ...'Units','points',...'Position',[130 80 60 30],...'String','Down',...'Style','pushbutton');% setup the game boardirows=1;for counter=1:16jcols=rem(counter,4);if jcols==0jcols=4;endposition=[40*jcols+40 85+40*irows 40 40]; index=(irows-1)*4+jcols;if jcols==4irows=irows+1;endboard.squares(index)=uicontrol(figure_h,... 'FontSize',18,...'FontWeight','bold',...'Units','points',...'Position',position,...'Style','pushbutton',...'Tag',num2str(index));endset(figure_h,'userdata',board);g2048('restart')case 'restart'totalscore=0;score_board=zeros(1,16);g2048('addnum') ;g2048('addnum') ;g2048('show')case'show'num_0=find(score_board==0);board=get(gcf,'UserData');set(board.squares,{'string'},num2cell(score_board)')set(board.squares,...'BackgroundColor',[0.701961 0.701961 0.701961],...'Enable','on',...'Visible','on')set(board.squares(num_0),...'BackgroundColor','black',...'Enable','off',...'String',' ');score_handle=findobj(gcf,'Tag','game_score');set(score_handle,...'String',num2str(totalscore),...'Tag','game_score');case 'down'C=score_board;for i=1:4A=[score_board(i) score_board(i+4) score_board(i+8) score_board(i+12)];[B score]=move(A);score_board(i)=B(1); score_board(i+4)=B(2);score_board(i+8)=B(3); score_board(i+12)=B(4); totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase 'up'C=score_board;for i=13:16A=[score_board(i) score_board(i-4) score_board(i-8) score_board(i-12)];[B score]=move(A);score_board(i)=B(1); score_board(i-4)=B(2);score_board(i-8)=B(3); score_board(i-12)=B(4);totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase 'right'C=score_board;for i=4:4:16A=[score_board(i) score_board(i-1) score_board(i-2) score_board(i-3)];[B score]=move(A);score_board(i)=B(1); score_board(i-1)=B(2);score_board(i-2)=B(3); score_board(i-3)=B(4); totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase 'left'C=score_board;for i=1:4:13A=[score_board(i) score_board(i+1) score_board(i+2) score_board(i+3)];[B score]=move(A);score_board(i)=B(1); score_board(i+1)=B(2);score_board(i+2)=B(3); score_board(i+3)=B(4); totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase'addnum'num_0=find(score_board==0);l=length(num_0);if l>0score_board(num_0(ceil(l*rand)))=2+2*(rand<0.1);endendendfunction Y=addnum(X)num_0=find(X==0);l=length(num_0);X(num_0(ceil(l*rand)))=2+2*(rand<0.1);Y=X;endfunction [B score]=move(A)score=0;for k=1:2for i=1:3if A(i)==0for j=i:3A(j)=A(j+1);endA(4)=0;endendendif A(1)==A(2)if A(3)==A(4)A(1)=A(1)+A(2);A(2)=A(3)+A(4);A(3)=0;A(4)=0;score=A(1)+A(2); elseA(1)=A(1)+A(2);A(2)=A(3);A(3)=A(4);A(4)=0;score=A(1);endelse if A(2)==A(3)A(1)=A(1);A(2)=A(2)+A(3);A(3)=A(4);A(4)=0;score=A(2);else if A(3)==A(4)A(1)=A(1);A(2)=A(2);A(3)=A(3)+A(4);A(4)=0;score=A(3); else score=0; endendendB=A;End5.俄罗斯方块%各个函数请分开写if nargin == 0OldHandle = findobj( 'Type', 'figure', 'Tag', 'RussiaBlock' ) ;if ishandle( OldHandle )delete( OldHandle ) ;endFigureHandle = figure( 'Name', '俄罗斯方块MATLAB版', 'Tag', 'RussiaBlock', 'NumberTitle', 'off',...'Menubar', 'none', 'DoubleBuffer', 'on', 'Resize', 'off', 'visible', 'on',...'KeyPressFcn', 'RussiaBlock( ''KeyPress_Callback'', gcbo )',...'HelpFcn', 'helpdlg(''帮不了你- -!'',''不好意思'')',...'CloseRequestFcn', 'RussiaBlock( ''CloseFigure_Callback'', gcbo )' ) ;generate_FigureContent( FigureHandle ) ;init_FigureContent( FigureHandle ) ;set( FigureHandle, 'Visible', 'on' ) ;elseif ischar( varargin{1} )feval( varargin{:} ) ;end% -------------------------------------------------------------------------function generate_FigureContent( FigureHandle )TabSpace = 30 ;BlockWidth = 20 ;BlockHeight = 20 ;FigureWidth = BlockWidth * (12 + 1) + TabSpace * 7;FigureHeight = 500 ;set( FigureHandle, 'Position', [0 0 FigureWidth FigureHeight] ) ;movegui( FigureHandle, 'center' ) ;% 创建菜单BeginMenu = uimenu( FigureHandle, 'Label', '开始' ) ;StartMenu = uimenu( BeginMenu, 'Label', '开始新游戏', 'Accelerator', 'N',...'Callback', 'RussiaBlock( ''StartNewGame_Callback'', gcbo )');SaveMenu = uimenu( BeginMenu, 'Label', '保存', 'Accelerator', 'S', 'Enable', 'off',...'Separator', 'on', 'Cal', 'RussiaBlock( ''SaveGame_Callback'', gcbo )' );LoadMenu = uimenu( BeginMenu, 'Label', '读取', 'Accelerator', 'L', 'Enable', 'off',...'Cal', 'RussiaBlock( ''LoadGame_Callback'', gcbo )' );QuitMenu = uimenu( BeginMenu, 'Label', '退出', 'Accelerator', 'Q', 'Separator', 'on', 'Cal', 'close(gcf)');OperationMenu = uimenu( FigureHandle, 'Label', '功能' );BoardConfigMenu = uimenu( OperationMenu, 'label', '键盘设置', 'Enable', 'off',...'Cal', 'RussiaBlock( ''BoardConfig_Callback'', gcbo )' );FigureConfigMenu = uimenu( OperationMenu, 'label', '界面设置', 'Enable', 'off',...'Cal', 'RussiaBlock( ''FigureConfig_Callback'', gcbo )' );HighScoreMenu = uimenu( OperationMenu, 'label', '最高记录', 'Separator', 'on',...'Cal', 'RussiaBlock( ''HighScore_Callback'', gcbo )', 'Enable', 'off' );GameLevelMenu = uimenu( OperationMenu, 'Label', '游戏难度',...'Cal','RussiaBlock( ''GameLevel_Callback'', gcbo )' );HelpMenu = uimenu( FigureHandle, 'Label', '帮助' );AboutMenu = uimenu( HelpMenu, 'Label', '关于此软件', 'Cal', 'helpdlg(''俄罗斯方块MATLAB版------冰风漫天(制作)(2006/11/21)'',''关于此软件……'')');HelpDlgMenu = uimenu( HelpMenu, 'Label', '游戏帮助', 'Separator', 'on', 'Cal', 'helpdlg(''帮不了你- -!'',''不好意思'')' );% 创建工具条,图标可以用imread从图片读取,但图片不要太大BeginTool = uipushtool( 'ToolTipString', '开始', 'CData', rand(16,16,3), 'Tag', 'BeginTool',...'ClickedCallback', 'RussiaBlock( ''StartNewGame_Callback'', gcbo )' ) ;PauseTool = uitoggletool( 'ToolTipString', '暂停', 'Tag', 'PauseTool', 'Tag', 'PauseTool',...'CData', reshape( repmat( [1 1 0], 16, 16), [16,16,3] ),...'ClickedCallback', 'RussiaBlock( ''PauseGame_Callback'', gcbo )' ) ;% 创建游戏窗口MainWindowXPos = TabSpace;MainWindowYPos = TabSpace;MainWindowWidth = BlockWidth * 12 ;MainWindowHeight = BlockHeight * 22 ;MainWindowPosition = [MainWindowXPos MainWindowYPos MainWindowWidth MainWindowHeight] ;% 定义游戏窗口的右键菜单AxesContextMenu = uicontextmenu( 'Tag', 'uicontextmenu' ) ;uimenu( AxesContextMenu, 'Label', '设置窗口颜色', 'Cal', 'RussiaBlock( ''WindowColor_Callback'', gcbo )' )uimenu( AxesContextMenu, 'Label', '设置背景图片', 'Cal', 'RussiaBlock( ''WindowPicture_Callback'', gcbo )' )uimenu( AxesContextMenu, 'Label', '设置方块颜色', 'Cal', 'RussiaBlock( ''BlockColor_Callback'', gcbo )' )uimenu( AxesContextMenu, 'Label', '恢复默认', 'Cal', 'RussiaBlock( ''Default_Callback'', gcbo )' )。

相关文档
最新文档