function myTrim(str) {
//如果是null或者undefind直接返回空字符串
if (!str) {
return ''
} else {
return str.trim()
}
}
// console.log(myTrim(null));
// console.log(myTrim(' 11111 '));
// let str =' z z z '
// console.log(str.trim()); //去除字符串前后空格
// console.log(str); //去除字符串前后空格
let game = {
//敏感词数组
sensitiveWord: ['CNM', 'QNM', 'NMSL'],
//使用数组模拟用户数据库
userList: [],
//宠物数组
petlist: [],
currentuser: null,
// petList:[
// {
// name:'小黑',
// gender:'GG',
// }
// ],
//登录页
showLoginPage() {
console.log('欢迎登录');
let userNameIsOk = true,
passwordIsOk = true
let password = '',
userName = ''
do {
userName = prompt('请输入用户名:')
if (!userName) {
userNameIsOk = false
console.log('用户名不能为空');
} else {
userNameIsOk = true
}
} while (!userNameIsOk);
// this.petlist=userName
do {
password = prompt('请输入密码:')
if (!password) {
passwordIsOk = false
console.log('密码不能为空');
} else if (password.length < 6) {
passwordIsOk = false
console.log('密码至少大于6位');
} else {
passwordIsOk = true
}
} while (!passwordIsOk);
this.currentuser=userName
//拿用户输入的用户名和密码,判断是否存在
let user = this.userList.find(function (item) {
return item.userName === userName
})
if (!user) {
console.log('此用户不存在!');
arguments.callee.call(this)
} else {
//用户存在,则判断密码对不对
if (user.password !== password) {
console.log('密码错误');
//有错则再次输入
arguments.callee.call(this)
} else {
//找到用户,登录成功
console.log('login success');
this.showMainPage()
}
}
},
//领养宠物
showgetpetpage() {
console.log('领养宠物');
let nickname;
let nicknameisok;
let type;
let typeisok;
let gender;
let genderisok
let currentuser = this.currentuser
let haspet = this.petlist.some(function (item) {
return item.master === currentuser
})
if (haspet) {
console.log('你已有宠物,不能重复领取');
return this.showMainPage()
}
do {
type = myTrim(prompt('请选择宠物类型:1.狗 2.猫'))
if (!['1', '2'].includes(type)) {
typeisok = false
console.log('选择的宠物类性不正确');
} else {
typeisok = true
}
} while (!type);
do {
nickname = myTrim(prompt('请输入宠物昵称'))
if (!nickname) {
nicknameisok = false
console.log('宠物姓名不能为空');
} else {
let isSensitive = this.sensitiveWord.some(function (item) {
return nickname.toUpperCase().includes(item.toUpperCase())
})
if (isSensitive) {
nicknameisok = false
console.log('宠物名不合法');
} else {
nicknameisok = true
}
}
} while (!nicknameisok);
// this.petlist.name=nickname
do {
gender = myTrim(prompt('请选择宠物性别:1.GG 2.MM'))
if (!['1', '2'].includes(gender)) {
genderisok = false
} else {
genderisok = true
}
} while (!genderisok);
console.log(type, gender, nickname);
this.petlist.push({
name: nickname,
gender: gender,
type: type,
master: this.currentuser,
state: 80
})
// console.log(petlist);
// this.showgetpetpage()
this.showMainPage()
},
//查看宠物
showpetinfopage() {
console.log('查看宠物');
let currentuser = this.currentuser
let mypet = this.petlist.find(function (item) {
return item.master === currentuser
})
if (mypet) {
console.log(`
你好,
我叫${mypet.name}
我是个${mypet.type==='1'?'狗':'猫'}
我的性别是${mypet.gender==='1'?'GG':'MM'}
我的主人是${mypet.master}
我的状态是${mypet.state}
`);
} else {
console.log('你还没有宠物');
return this.showMainPage()
}
let type = prompt('请选择互动方式:1.喂食 2.逗TA玩 3.返回主菜单')
switch (type) {
case '1':
console.log(mypet.name+'吃东西咯~');
mypet.state+=10
if(mypet.state>100) mypet.state=100
break;
case '2':
console.log(mypet.name+'做游戏咯~');
mypet.state+=5
if(mypet.state>100)mypet.state=100
break;
case '3':
return this.showMainPage()
default:
console.log('输入有误,请重新操作');
break;
}
arguments.callee.call(this)
},
showMainPage() {
let type = prompt('欢迎来到宠物世界,请选择操作: 1.领养宠物 2.查看宠物 3.注销登录')
switch (type) {
case '1':
this.showgetpetpage()
break;
case '2':
this.showpetinfopage()
break;
case '3':
this.showWelComePage()
break;
default:
arguments.callee.call(this)
break;
}
console.log('这里是游戏主界面');
},
//注册页
showRegisterPage() {
console.log('欢迎注册');
//定义状态,代表用户名和密码验证是否通过
let userNameIsOk = true,
passwordIsOk = true,
cPasswordIsOk = true
//在外面定义userName和password,便于后续使用
let password = '',
userName = ''
//因为当前场景需要先执行后判断,所以采用do-while
do {
userName = myTrim(prompt('请输入用户名:'))
//如果去完空格是空字符串,则提示,设置验证为不通过
if (!userName) {
userNameIsOk = false
console.log('用户名不能为空');
} else {
//通过some方法检查用户名是否包含敏感词,
let isSensitive = this.sensitiveWord.some(function (item) {
//统一设置为大写再比对,以此忽略大小写
return userName.toUpperCase().includes(item.toUpperCase())
})
if (isSensitive) {
userNameIsOk = false
console.log('用户名不合法');
} else {
//判断用户数组中是否已存在同样的用户名
let isRepeat = this.userList.some(function (item) {
return item.userName === userName
})
if (isRepeat) {
userNameIsOk = false
console.log('用户名已存在');
} else {
userNameIsOk = true
}
}
}
} while (!userNameIsOk); //不管是因为什么而验证不通过,就继续循环要求重新输入
do {
password = myTrim(prompt('请输入密码:'))
if (!password) {
passwordIsOk = false
console.log('密码不能为空');
} else if (password.length < 6) {
passwordIsOk = false
console.log('密码至少大于6位');
} else {
passwordIsOk = true
}
} while (!passwordIsOk);
do {
let passwordConfirm = myTrim(prompt('请输入确认密码:')) //将字符串左右去除空格
if (passwordConfirm !== password) {
console.log('两次密码输入不一致');
cPasswordIsOk = false
} else {
cPasswordIsOk = true
}
} while (!cPasswordIsOk);
//往用户数组中添加一条用户数据
let newUser = {
userName,
password
}
this.userList.push(newUser)
console.log('当前用户:', this.userList);
//注册完成,回到欢迎页
this.showWelComePage()
},
//欢迎页
showWelComePage() {
let type = prompt('欢迎来到宠物世界,请选择操作:1.登录 2.注册 3.退出')
switch (type) {
case '1':
this.showLoginPage()
break;
case '2':
this.showRegisterPage()
break;
case '3':
console.log('退出成功,欢迎再来');
break;
default:
console.log('输入有误,请重新操作');
arguments.callee.call(this)//指向本函数,与函数名无关
// this.showWelComePage()
break;
}
}
}
//页面初始显示欢迎页
game.showWelComePage()
效果如下图所示: