用Python做2048游戏 网易云课堂配套实验课。通过GUI来体验编程的乐趣。

第1节
认识wxpython
第2节
画几个形状
第3节
再做个计算器
第4节
最后实现个2048游戏

实验1-认识wxpython

一、实验说明

1. 环境登录

无需密码自动登录,系统用户名shiyanlou

2. 环境介绍

本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:

  1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令
  2. Firefox:浏览器
  3. sublime/GVim:好用的编辑器
  4. git,用于获得参考代码

3. 环境使用

使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操作。

二、课程介绍

课程目的:

熟悉实验环境
了解wxpython
能运行出一个窗口
理解ClientDC和PaintDC的区别

课程环境已装好wxpython,配套代码仓库

http://git.shiyanlou.com/heibanke/shiyanlou_cs427

获得参考代码敲命令 git clone 上面的代码仓库

1. wxpython

wxpython是基于Python的GUI库,优点如下:

  1. 跨平台,32-bit Microsoft Windows,大多数Unix/Linux,Mac
  2. 开源免费
  3. 简单易用

官方文档链接

不错的英文教程适合系统的学习各种控件的使用。

<>还不错的中英文版书籍,网上很容易搜到电子版

2. 运行一个窗口

直接实例化

import wx

# 每个wxPython的程序必须有一个wx.App对象.
app = wx.App()

# 实例化一个frame
"""
None: 当前窗口的父窗口parent,如果当前窗口是最顶层的话,则parent=None,如果不是顶层窗口,则它的值为所属frame的名字
-1: id值, -1的话程序会自动产生一个id
pos: 位置
size: 宽,高大小
还有风格参数style,不填默认是这样几个的组合
wx.MAXIMIZE_BOX| wx.MINIMIZE_BOX| wx.RESIZE_BORDER|wx.SYSTEM_MENU| wx.CAPTION| wx.CLOSE_BOX
你可以去掉几个看看效果,比如
style = wx.SYSTEM_MENU| wx.CAPTION| wx.CLOSE_BOX
"""
frame = wx.Frame(None, -1, title=‘wx_00_base.py‘, pos=(300,400), size=(200,150))

# 居中处理
#frame.Centre()

# 显示frame
frame.Show()

# 进入循环,等待窗口响应
app.MainLoop()

3. 定义Frame子类的方式

#coding=utf-8

import wx
class Example(wx.Frame):
def __init__(self, title):
    super(Example, self).__init__(None, title=title,
        size=(600, 400))
    self.Centre()
    self.Show()

if __name__=="__main__":
    app = wx.App()
    Example(‘Shapes‘)
    app.MainLoop()

上面两种方式是一致的。

4. 接下来画一条线

# -*- coding: utf-8 -*-
import wx

class Example(wx.Frame):
    def __init__(self, title):
        super(Example, self).__init__(None,title=title,
            size=(250, 150))

        self.Centre()
        self.Show()

        dc = wx.ClientDC(self)
        # 画一条线,参数为起始点的x,y,终点的x,y
        dc.DrawLine(50, 60, 190, 60)

if __name__ == ‘__main__‘:
    app = wx.App()
    Example(‘Line‘)
    app.MainLoop()

试着把窗口resize到很小,然后再放大,你会发现什么。(没有绑定EVT_PAINT之前,线只绘制一次,如果Resize窗口小到不能显示完整的线,然后再把窗口回复原样,则不能显示的线无法恢复。)

5. 使用PaintDC

# -*- coding: utf-8 -*-
import wx

class Example(wx.Frame):
    def __init__(self, title):
        super(Example, self).__init__(None, title=title,
            size=(250, 150))

        # 绑定渲染窗口的动作到OnPaint
        # 这样当resize窗口,会重新调用该函数
        self.Bind(wx.EVT_PAINT, self.OnPaint)

        self.Centre()
        self.Show()

    # 画一条线,参数为起始点的x,y,终点的x,y
    def OnPaint(self, e):
        dc = wx.PaintDC(self)
        dc.DrawLine(50, 60, 190, 60)

if __name__ == ‘__main__‘:
    app = wx.App()
    Example(‘Line‘)
    app.MainLoop()

运行后试着resize窗口,绑定事件后,由于Resize会调用该绑定函数,因此线就在那里,无论你怎么resize。

最后我们把画一根线替换成画多根线,就把DrawLine换成DrawLines,例如:

dc.DrawLines(((20, 60), (100, 60), (100, 10),(20, 10), (20,60)))

参数是一个一个点,注意这里参数格式是点x,y的元组列表。

6. 保存代码

如果不熟悉git可以baidu看看教程。

1. git clone 自己的仓库地址
2. 实验代码拷过去以后用
3. git add -A .
4. git commit -am "your comment"
5. git push origin master

以后再用就clone自己的代码仓库就ok

三. 总结

本节课我们掌握要点如下:

  1. 了解wxpython
  2. 熟悉环境特别是git
  3. 能运行出wxpython的窗口
  4. 了解ClientDC和PaintDC的差别
  5. 画线

如果通过具体的点来画多边形,很不方便,而且如果再来计算多边形的面积,比较各个多边形的大小等,那就更不好操作了。下一节我们通过自定义类来画各种形状,从而理解类的使用。

时间: 2024-10-13 10:20:54

用Python做2048游戏 网易云课堂配套实验课。通过GUI来体验编程的乐趣。的相关文章

网易云课堂_C语言程序设计进阶_期末考试编程题部分

123123 1 字符串循环右移(5分) 题目内容: 输入一个字符串和一个非负整数N,要求将字符串循环右移N次. 输入格式: 输入在第1行中给出一个字符串,以'#'表示结束,‘#’不是字符串的一部分,字符串的长度未知,但至少有一个字符:输入的第2行给出非负整数N. 输出格式: 在一行中输出循环右移N次后的字符串. 输入样例: Hello World!# 2 输出样例: d!Hello Worl 时间限制:500ms内存限制:32000kb 2 最小包围矩形(5分) 题目内容: 给定一组二维坐标,

?《Python自动化测试修炼宝典》线上课程已经成功入驻网易云课堂......

<Python自动化测试修炼宝典>线上课程已经成功入驻网易云课堂...... IT测试老兵利用工作之余,亲自录制的<Python自动化测试修炼宝典>线上课程已经成功入驻网易云课堂,想要提高测试技术的小伙伴可以线上购买课程进行学习. 课程背景 测试人员进阶实战课程.本套课程以作者多年测试实战经验为背景,结合大量测试案例深入浅出讲解目前主流web端.app端自动化测试框架以及使用Python如何从0到1实现接口测试框架的搭建. 课程特色 系统教学+实战案例+开放源码.涵盖Python3

Python实例之抓取网易云课堂搜索数据(post方式json型数据)并保存为TXT

本实例实现了抓取网易云课堂中以'java'为关键字的搜索结果,经详细查看请求的方式为post,请求的结果为JSON数据 具体实现代码如下: import requests import json finalstr = '' #初始化字符串 totlePage = 0 #初始化总页数 test = 0 #初始化数据总条数 url = 'http://study.163.com/p/search/studycourse.json' headers = {'content-type': 'applic

聊一聊【网易云课堂】

(首先说明,这不是广告,知识我个人的一点感受而已) 若干天之前注册了网易云课堂,并填写.邮寄申请讲师的材料. 若干天之后的今天,终于收到通知,我通过了讲师认证,给我名字上加了个大大的"V".以及<petshop4.0源码解读>教程通过了审核,正式发布了.下班之前看了看,竟然已经有6名学习者了,就是不知道他们有没有真的学.有想学的直接去那里看就行了,免费的. 课堂教程的网址是:http://study.163.com/course/introduction/655003.ht

网易云课堂程序设计入门--C语言第七周:指针与字符串学习笔记

====================================== 第七周:指针与字符串学习笔记 网易云课堂 程序设计入门–C语言 指针与字符串 学习笔记 ====================================== 7-1指针初步 7-1-1类型大小与取地址运算 sizeof是一个运算符 给出某个变量货类型在内存中所占据的字节数 sizeof(int); sizeif(i); double变量在内存中占据的空间是int变量的两倍 { int a; a =6; prin

网易云课堂-软件工程(C编码实践篇)

网易云课堂-软件工程(C编程实践篇) 识别代码工程质量: 代码风格: 封装接口: 可重用代码: 可重入函数和线程安全: 代码风格的原则:简明.易读.无二义性:代码风格原则在团队交流过程中非常重要.

[Erl_Question07] Erlang 做图形化编程的尝试:纯Erlang做2048游戏

用Erlang久了,以为erlang做类似于As3,JS的图形化界面是绝对不可能的,多少次,多少次想用erlang做个炫酷的图形游戏.终于:折腾出来了结果:纯Erlang也可以做到! 因为以前接触过WxErlang,网上的资料又少,还好有wx : demo().神器,用了大约20小时的时间.代码在这里: Erlang 2048 github 欢迎大家一起玩! 框架基本流程 使用到的知识: 1. 图形化界面使用了wxErlang; 2.LAN联网使用到Erlang的分布节点互连:net_kerne

网易云课堂_C++程序设计入门(上)_第2单元:丹青画松石– EGE图形库_第2节:一个简单的EGE程序

网易云课堂_C++程序设计入门(上)_第2单元:丹青画松石– EGE图形库_第2节:一个简单的EGE程序 #ifndef _GRAPHICS_H_ #define _GRAPHICS_H_ #ifndef __cplusplus #error You must use C++ compiler, or you need filename with '.cpp' suffix #endif #include "ege.h" using namespace ege; #endif #inc

12岁的少年教你用Python做小游戏

原地址:http://blog.jobbole.com/46308/ 本文由 伯乐在线 - 贱圣OMG 翻译自 Julian Meyer.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. [感谢@贱圣OMG 的热心翻译.如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] 你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! 在这个教程里,你要学做一个叫<兔子和獾>的塔防游戏,兔子作为英雄,需要在城堡里抵御獾的进攻. 为了写这个游戏的代码,你将会用Python.好吧,我