本次博客记录的是现代软件工程课程设计黄金点游戏的第二次开发过程
阿薛 小姚
详细代码链接
项目目录
游戏规则
N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618 (所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同 学得到N分,离G最远的同学得到-2分,其他同学得0分。
项目基本需求
采用单机方式实现,需要为用户提供便利的输入界面;
该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果;
后续在此基础上迭代开发。
项目扩展
第一次开发已经实现了课程的基本需求,又在老师的指导下做出了一些改进:输入所选数字时显示为星号,减少了被偷窥的风险,提高了安全性;
我们决定在第二次开发中提升难度,直接将单机游戏升级为多人在线游戏,玩家以注册用户的身份登录,可与其他玩家在线博弈,并且可以查看自己的游戏记录
设计思路
项目环境: Pycharm2020 python3.8 Django2.1
设计思路流程图![在这里插入图片描述](https://img-blog.csdnimg.cn/20201102091600571.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE1MzQ1MA==,size_16,color_FFFFFF,t_70#pic_center)
具体游戏功能在之前博客中有讨论,在此不再赘述
具体实现
本人第一次做web开发,没有axue那么熟练/捂脸,所以只做了登录界面的后端,前端还是axue帮忙弄的/捂脸。但学习过程中还是收获很大的
Django是一款基于Python的开源Web 应用框架,使用MVC(Model + View + Controller)模型,具有低耦合、开发快捷、维护成本低等优势。而且Django有强大的数据库功能,可以比较轻松地实现数据的导入、查询、修改等功能。
做这次项目时我也是从头开始学习/捂脸,如果您也是web小白的话,推荐参考菜鸟教程Django
首先在Pycharm(注意,web开发必须使用专业版)中新建一个Django项目Goldenpoint2,并添加新的Django Server的Configuration用于运行程序。
在项目目录下打开终端,输入如下指令生成一个user应用管理用户信息
python manage.py startapp user
修改setting.py文件,在INSTALLED_APPS中添加“‘user.apps.UserConfig’,”
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user.apps.UserConfig',
]
完善数据库设置,绑定IP并分配端口号
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
'charset': 'utf8',
}
}
修改语言和时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
为了方便数据导入MySql,在主项目下的__init__.py写入如下代码进行初始化
import pymysql
pymysql.install_as_MySQLdb()
打开user下的model.py,建立两个类:用户类和历史记录类,分别用于管理登录和历史查询,分别建立相应的表
from django.db import models
# Create your models here.
class User(models.Model):
email = models.CharField(max_length=255, db_column='e-mail', primary_key=True)
username = models.CharField(max_length=20, db_column='username')
passwd = models.CharField(max_length=20, db_column='password')
score = models.IntegerField(db_column='total_score', default=0)
class Meta:
db_table = 'User_Info'
verbose_name = '用户'
verbose_name_plural = verbose_name
class History(models.Model):
game_id = models.AutoField(db_column='game_index', primary_key=True)
date = models.DateField(db_column='date')
time = models.TimeField(db_column='time')
play_number = models.IntegerField(db_column='player_number')
number = models.FloatField(db_column='number')
G = models.FloatField(db_column='G_number')
score = models.IntegerField(db_column='score')
class Meta:
db_table = 'Game_History'
verbose_name = '历史记录'
verbose_name_plural = verbose_name
将表单导入数据库,执行如下命令
python manage.py makemigrations user
python manage.py migrate user
打开admin.py,注册各个模块
from django.contrib import admin
# Register your models here.
from .models import User, History
admin.site.site_header = '用户管理后台'
admin.site.site_title = '用户管理'
@admin.register(History)
class HistoryAdmin(admin.ModelAdmin):
list_display = ('game_id', 'date', 'time', 'play_number', 'number', 'G', 'score')
list_filter = ('game_id', 'date', 'time', 'player_number', 'number', 'G', 'score')
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = ('username', 'email')
list_display_links = ('username', 'passwd', 'email')
将登陆页面index.html和主页面main.html文件放在templates文件夹下(这一块是axue做的)。
打开user下的views.py,完成登录和注册函数的编写
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.contrib.auth import logout
from user import models
# Create your views here.
def index(request):
return render(request, 'index.html')
def login(request):
if request.method == 'POST':
e_mail = request.POST.get('logemail')
password = request.POST.get('logpass')
user = models.User.objects.get(email=e_mail)
if password == user.passwd:
return render(request, 'main.html')
else:
return render(request, 'index.html', {'message': '密码不正确'})
def signup(request):
if request.method == 'POST':
usernm = request.POST.get('logname')
e_mail = request.POST.get('logemail')
password = request.POST.get('logpass')
u1 = models.User(email=e_mail, username=usernm, passwd=password)
u1.save()
return render(request, 'index.html')
打开urls.py,配置路由
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from user import views
urlpatterns = [
path(r'^$', views.index),
path('/login', views.login, name='login'),
path('/signup', views.signup, name='signup')
]
项目测试
运行项目,点击运行界面返回的连接,打开如下界面
注册后登录
进入主页
目前只实现了注册和登录,之后完善其他功能并改进。
如果觉得这篇博文对您有帮助,可以打赏鼓励一下/谢谢