基于小程序制作一个猜拳小游戏

news/2024/7/20 2:08:11 标签: 小程序, 微信小程序, 前端, 猜拳

在工作学习之余玩一会游戏既能带来快乐,还能缓解生活压力,跟随此文一起制作一个小程序游戏吧。

    • 创建小程序
    • 功能实现
    • 界面优化
    • 代码块

创建小程序

  1. 访问微信公众平台,点击账号注册。

在这里插入图片描述

  1. 选择小程序,并在表单填写所需的各项信息进行注册。

在这里插入图片描述
在这里插入图片描述

  1. 在开发管理选择开发设置,将AppID及AppSecret复制出来进行存储。

在这里插入图片描述

  1. 下载安装微信web开发者工具并创建一个新的项目,填入上图所复制的AppId。

在这里插入图片描述
在这里插入图片描述

功能实现

  1. 准备对应的素材用于界面效果展示。
  1. 在WXML中实现两个image标签,其src值需要动态获取,左侧代表玩家,右侧代表电脑。

在这里插入图片描述

<view class="content">
    <image class="plarer" src="{{player}}" ></image>
    <view class="tips">{{tips}}</view>
    <image class="computer" src="{{computer}}"></image>
</view>
  1. 在JS中设置定时器,每隔0.1秒切换背景图,达到一个闪烁的效果。

在这里插入图片描述

    var start=0;
    var step=1;
    //存放素材的数组
    const iconArray= ['./image/icon1.png','./image/icon2.png','./image/icon3.png'];
    this.outInter= setInterval(()=>{
      start+=start
      if(start>2){
        start=0
      }
      const computerImg = iconArray[start];  
      this.setData({
        computer:computerImg
      })
    },100)
  1. 给代表玩家的image动态赋值加载中的动画,同时在页面下方实现选择的区域,让用户能够点击。

在这里插入图片描述

<view class="choice">
    <view bindtap="clickIcon">
      <image src="./image/icon1.png" data-id="0"></image>
      <image src="./image/icon2.png" data-id="1"></image>
      <image src="./image/icon3.png" data-id="2"></image>
    </view>
    <view bindtap="agiln">再来一次</view>
  </view>
  1. 实现图片的点击事件,当点击时修改上方代表玩家图片的src值,同时停止右侧代表电脑的图片的闪烁,并通过下标判断电脑的选择。
let id = e.target.dataset.id;
if(id==0){
	src='/images/icon1.jpg';
}
if(id==1){
	src='/images/icon2.jpg';
}
if(id==2){
	src='/images/icon3.jpg';
}
that.setData({
	player:id
});
  1. 在给玩家图片赋值的同时,停止电脑方图片的闪烁,获取其src,判断哪方获胜并在页面进行显示。
    const player = this.data.player;
    const computer = this.data.computer;
	if ((player === icon1 && computer === icon1 ) || (player === icon2 && computer === icon2) || (player === icon3&& computer === icon3)) {
      this.setData({
        tips: '获胜了',
        sum: this.data.sum+1
      })
    } else if (player === computer) {
      this.setData({
        tips: '平局了'
      })
    } else {
      this.setData({
        tips: '失败了'
      })
    }
    }
  1. 在页面底部实现再来一次按钮,点击时将页面数据进行重置。
<view bindtap="agiln">再来一次</view>

   this.setData({
      player: './image/load.gif',
      tips: '重新开始'
    })

界面优化

  1. 游戏功能实现后,可以增加一个欢迎界面,达到一个缓冲效果,让用户通过这个界面再访问到游戏界面。

在这里插入图片描述

  1. 这里需要用到一些官方组件来获取用户头像及昵称等信息。
<open-data type="userAvatarUrl"></open-data>
<open-data type="userNickName"></open-data>
  1. 也可以通过获得用户授权的方式来获取。
<button open-type="getUserInfo">授权登录</button>

 // 查看是否授权
    wx.getSetting({
      success (res){
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称
          wx.getUserInfo({
            success: function(res) {
              console.log(res.userInfo)
            }
          })
        }
      }
    })
  1. 给进入游戏按钮增加一个点击事件,当点击时则进行页面跳转。
<view class="btn" bindtap="game">进入游戏</view>

wx.navigateTo({
  url: '/pages/index/index',
})

代码块

<view class="content">
  <view >石头剪刀布</view>
  <view>你已经获胜了<text>{{sum}}</text></view>
  <view class="test">
    <image class="player" src="{{player}}" ></image>
    <view class="tips">{{tips}}</view>
    <image class="computer" src="{{computer}}"></image>
  </view>
<view class="choice">
    <view bindtap="clickIcon">
      <image src="./image/icon1.png" data-id="0"></image>
      <image src="./image/icon2.png" data-id="1"></image>
      <image src="./image/icon3.png" data-id="2"></image>
    </view>
    <view bindtap="agiln">再来一次</view>
  </view>
</view>
   var start=0;
    var step=1;
    //存放素材的数组
    const iconArray= ['./image/icon1.png','./image/icon2.png','./image/icon3.png'];
    this.outInter= setInterval(()=>{
      start+=start
      if(start>2){
        start=0
      }
      const computerImg = iconArray[start];  
      this.setData({
        computer:computerImg
      })
    },100)
let id = e.target.dataset.id;
that.setData({
	player:id
});
if ((player === icon1 && computer === icon1 ) || (player === icon2 && computer === icon2) || (player === icon3 && computer === icon3)) {
  this.setData({
    tips: '获胜了',
    sum: this.data.sum+1
  })
} else if (player === computer) {
  this.setData({
    tips: '平局了'
  })
} else {
  this.setData({
    tips: '失败了'
  })
}
.body{
  width: 100vw;
  height: 100vh;
  background-color: white;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.title{
  font-size: 40rpx;
  font-weight: 700;
  margin-top: 30rpx;
}
.content{
  font-size: 35rpx;
  margin-top: 95rpx;
}
.content>text{
  color: red;
}
.playerBox{
  width: 620rpx;
  height: 205rpx;
  display: flex;
  justify-content: space-between;
  margin-top: 30rpx;
}
.playerBox>image,.playerBox>view{
  width: 205rpx;
  height: 205rpx;
}
.player,.computer{
  /* border: 1rpx solid #f1f1f1; */
}
.player{
  font-size: 30rpx;
  padding: 10rpx;
  color: red;
  text-align: center;
}
.box{
  width: 655rpx;
  height: 650rpx;
  /* background-color: #f5eb90; */
  margin-top: 95rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.box-text{
  font-size: 40rpx;
  margin-top: 65rpx;
}
.box-click{
  width: 100%;
  height: 205rpx;
  margin-top: 60rpx;
}
.box-click>image{
  width: 205rpx;
  height: 205rpx;
  border-radius: 50%;
  border: 1rpx solid #f1f1f1;
  margin-left: 10rpx;
}
.clickBtn{
  width: 345rpx;
  height: 90rpx;
  color: white;
  background: linear-gradient(to right,#FF1B1B,#FFA11B);
  border-radius: 10rpx;
  margin-top: 55rpx;
  line-height: 90rpx;
  text-align: center;
  font-size: 45rpx;
}



http://www.niftyadmin.cn/n/4630.html

相关文章

初识C++(五)

简述&#xff1a;初识C章节最后一节啦 整体感觉就是C像是C的补充和升级 以一种更简单的方式奔向普罗大众 从而也能使更多人接受编程 当然不是讲C简单 就是C像是从机器时代进入了电气时代 以更简单的操作实现更高的效率&#xff0c;这是我在接触C一周时的整体印象。 目录 auto关…

HTTP 协议的基本格式和 fiddler 的简单使用

荔枝1.HTTP基本介绍2.协议格式fiddler下载与使用请求响应1.HTTP基本介绍 HTTP协议&#xff0c;又称超文本传输协议&#xff0c;在应用层协议中使用非常广泛。 TCP/IP模型可见博客 我用#CSDN#这个app发现了有技术含量的博客&#xff0c;小伙伴们求同去《每天一个小细节&#xf…

mac支持的硬盘格式 什么硬盘格式是mac和win支持的

大部分硬盘在默认出厂前都会设定好一个固定的磁盘格式&#xff0c;如果该格式与用户电脑所使用的系统不兼容&#xff0c;就无法正确地进行硬盘读写甚至硬盘识别。对于Mac系统和Windows系统而言&#xff0c;它们都有自己支持的某些硬盘格式。什么是Mac支持的硬盘格式&#xff0c…

基于三段式命令及筛选器的rbac权限控制方案

引用自 摸鱼wiki 1. 权限命令的表示 1.1 权限命令 采用三段式设计&#xff0c;将命令划分为类型、操作、属性/对象三个层级。相较于采用常量声明&#xff0c;这样的写法可以支持使用通配符进行设置&#xff0c;减少调用时的代码量。 // 常量 File_Add File_Delete File_Swit…

Ubuntu安装grafana并配置influxdb数据源

Ubuntu安装grafana并配置influxdb数据源显示。 第一种方法&#xff1a; 1、ubuntu安装 apt-get install grafana 启动、重启、状态 sudo systemctl start grafana-server sudo systemctl restart grafana-server sudo systemctl status grafana-server 默认端口是3000&…

为什么很多新型编程语言都抛弃了 C 语言风格的 for 语句?

因为C风格的for循环有太多不确定的地方&#xff0c;这些东西都非常的不直观&#xff1a; 典型的C风格的for循环像这样&#xff1a; for( initialize; condition; increment )statement( block); 那么存在这么一大堆问题&#xff1a; initialize声明的变量可见性范围是&…

面试不面试,你都必须得掌握的vue知识

前言 最近抽空整理了下我对vue2.x的理解和认知&#xff0c;涵盖了vue2.x的常用知识、冷知识以及一些底层原理&#xff0c;算是我的vue2世界观。由于文章比较长&#xff0c;大家可以酌情根据自身需求选读&#xff0c;相信各位耐心看完定会有所收获。 因为是自己的理解&#xf…

二分查找的模板

这篇博客的二分用的都是左闭右闭的区间&#xff0c;对于二分来说还是我还是习惯这样写 最传统的二分查找&#xff0c;用左闭右闭写 int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1; // 定义target在左闭右闭的区间里&#xff0…