js 五子棋(无ai,仅判断胜负)

零基础用纯前端实现五子棋:从棋盘绘制到胜负判断的完整开发指南 本文为零基础开发者提供了一份完整的纯前端五子棋游戏开发指南。通过HTML5 Canvas绘制棋盘,结合JavaScript实现落子交互与胜负判定算法,并讲解了如何添加悔棋功能和简单AI对手。文章详细拆解了从棋盘绘制到核心逻辑的每一步,是学习前端游戏开发的绝佳实践项目。 阅读详情

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>五子棋</title>
    <style type="text/css">
        *{margin:0;padding:0;}
        body{margin:0 auto;padding: 0;width:600px;height:600px; text-align:center}
        .top{width:600px;height:55px;}
        .middle{width:600px;height:490px;}
        .left{width:110px;height:480px;float:left;}
        #right{width:480px;height:480px;float:left;padding:10px 0px 0px 10px; background-color:#CCC;}
        #b1{width:450px;height:450px;z-index:1;margin: 10px 10px;position:absolute;}
        #z2{width:480px;height:480px;z-index:2; display:none;position:absolute;}
        #z2 span.wb{ background:url(imgs/wb.gif) no-repeat;}
        #z2 span.bb{background:url(imgs/bb.gif) no-repeat;}
        .bottom{width:600px;height:55px;}
    </style>
    <script src="js/JScriptLib.js" type="text/javascript"></script><!-- 文章js常用类 -->
    <script type="text/javascript">
        var flag = 0;
        var w = [];
        var b = [];
        var chesscount = 1;
        //开始游戏
        function startGame() {
            drawGameBack();//画棋盘
            drawGameFlag();//棋子占位
            showCurrent("白方");
        }
        function drawGameBack() {
            var b1 = JScriptLib.$("b1", 0);
            var divwh = JScriptLib.$("chessboard", 0).value;
            var divcount = 15*15;
            divwh = divwh + "px";
            b1.style.borderTop = "#000 solid 1px";
            b1.style.borderRight = "#000 solid 1px";
            var _div = []
            for (i = 0; i < divcount; i++) {
                _div[i] = document.createElement("div");
                _div[i].className = "div"
                _div[i].style.width = divwh;
                _div[i].style.height = divwh;
                _div[i].style.borderBottom = "#000 solid 1px";
                _div[i].style.borderLeft = "#000 solid 1px";
                _div[i].style.styleFloat = "left";
                b1.appendChild(_div[i]);
            }
        }
        //span 宽高固定 20 px
        function drawGameFlag() {
            var z2 = JScriptLib.$("z2", 0);
            z2.style.display = "block";
            var spanwh = 20;
            var spancount = 16*16;
            spanwh = spanwh + "px";
            var _span = [];
            for (i = 0; i < spancount; i++) {
                _span[i] = document.createElement("span");
                _span[i].className = "span";
                _span[i].style.width = spanwh;
                _span[i].style.height = spanwh;
                _span[i].style.margin = "0px 10px 10px 0px";
                _span[i].style.styleFloat = "left";
                _span[i].style.cursor = "pointer";//设置鼠标样式
                _span[i].title=parseInt(i%16)+"-"+parseInt(i/16);//获取坐标(x,y)
                z2.appendChild(_span[i]);
            }
            showPieces();//添加事件
        }
        function showPieces() {
            var piece = z2.getElementsByTagName("span");
            for (var i = 0; i < piece.length; i++) {
                piece[i].onclick = function() {
                    play(this);
                }
            }
        }
        //开始下子
        function play(obj) {
            if (obj != null) {
                if (obj.className != "wb" && obj.className != "bb") {
                    var index = obj.title;
                    if (flag == 0) {
                        obj.className = "wb"
                        w.push(index);
                        if (isWin(index)) {
                            chesscount = 1;
                            alert("白方胜!");
                            cancelGame();
                        } else {
                            //var xindex = index.split("-");
                            //w[parseInt(xindex[0])][parseInt(xindex[1])] = "白";
                            flag = 1;
                            showCurrent("黑方");
                        }
                    } else {
                        obj.className = "bb"
                        b.push(index);
                        if (isWin(index)) {
                            chesscount = 1;
                            alert("黑方胜!");
                            cancelGame();
                        } else {
                            flag = 0;
                            showCurrent("白方");
                        }
                    }
                }
            }
        }
        //判断是否获胜
        function isWin(currentindex) {
            var win = false;
            var x;
            var y;
            var temp = currentindex.split("-");
            x = parseInt(temp[0]);
            y = parseInt(temp[1]);
            if (flag == 0) {//白方
                //垂直
                if (winArithmetic(x, y, w, 0) == 5) {
                    return win = true;
                }
                //水平
                if (winArithmetic(x, y, w, 1) == 5) {
                    return win = true;
                }
                //45度
                if (winArithmetic(x, y, w, 2) == 5) {
                    return win = true;
                }
                //135度
                if (winArithmetic(x, y, w, 3) == 5) {
                    return win = true;
                }
            } else {//黑方
                //垂直
                if (winArithmetic(x, y, b, 0) == 5) {
                    return win = true;
                }
                //水平
                if (winArithmetic(x, y, b, 1) == 5) {
                    return win = true;
                }
                //45度
                if (winArithmetic(x, y, b, 2) == 5) {
                    return win = true;
                }
                //135度
                if (winArithmetic(x, y, b, 3) == 5) {
                    return win = true;
                }
            }
            return win;
        }
        //0=垂直(y变化) 1=水平(x变化) 2=45度和3=135度(x,y都变化)
        function winArithmetic(x, y, objarr, direction) {
            var strtemp = getStr(x, y, 1, direction); //(changepoint + 1).toString() + "-" + fixedpoint;
            if (objarr.toString().indexOf(strtemp) != -1) {//正方1 继续判断
                chesscount = 2;
                strtemp = getStr(x, y, 2, direction); //(changepoint + 2).toString() + "-" + fixedpoint;
                //正方2 继续判断
                if (objarr.toString().indexOf(strtemp) != -1) {
                    chesscount = 3;
                    strtemp = getStr(x, y, 3, direction); //(changepoint + 3).toString() + "-" + fixedpoint;
                    //正方3 继续判断
                    if (objarr.toString().indexOf(strtemp) != -1) {
                        chesscount = 4;
                        strtemp = getStr(x, y, 4, direction); //(changepoint + 4).toString() + "-" + fixedpoint;
                        //正方4 继续判断
                        if (objarr.toString().indexOf(strtemp) != -1) {//正方5 返回
                            return chesscount = 5;
                        } else {//正方4,反方判断
                            strtemp = getStr(x, y, -1, direction); //(changepoint - 1).toString() + "-" + fixedpoint;
                            if (objarr.toString().indexOf(strtemp) != -1) {//正方4 反方1 返回
                                return chesscount = 5;
                            }
                        }
                    } else {//正方3 反方判断
                        strtemp = getStr(x, y, -1, direction); //(changepoint - 1).toString() + "-" + fixedpoint;
                        if (objarr.toString().indexOf(strtemp) != -1) {
                            chesscount = 4;  //正方3 反方1 共4
                            strtemp = getStr(x, y, -2, direction); //(changepoint - 2).toString() + "-" + fixedpoint;
                            //正方3 反方1 共4 反方判断
                            if (objarr.toString().indexOf(strtemp) != -1) {
                                return chesscount=5;
                            }
                        }
                    }
                } else {//正方2 反方判断
                    strtemp = getStr(x, y, -1, direction); //(changepoint - 1).toString() + "-" + fixedpoint;
                    if (objarr.toString().indexOf(strtemp) != -1) {//正方2 反方1 共3 继续反方判断
                        chesscount = 3;
                        strtemp = getStr(x, y, -2, direction); //(changepoint - 2).toString() + "-" + fixedpoint;
                        if (objarr.toString().indexOf(strtemp) != -1) {//正方2 反方2 共4 继续反方判断
                            chesscount = 4;
                            strtemp = getStr(x, y, -3, direction); //(changepoint - 3).toString() + "-" + fixedpoint;
                            if (objarr.toString().indexOf(strtemp) != -1) {//正方2 反方3 共5 返回
                                return chesscount=5;
                            }
                        }
                    }
                }
            } else {//正方1 反方判断
                strtemp = getStr(x, y, -1, direction); //(changepoint - 1).toString() + "-" + fixedpoint;
                if (objarr.toString().indexOf(strtemp) != -1) {//正方1 反方1 共2 继续反方判断
                    chesscount = 2;
                    strtemp = getStr(x, y, -2, direction); //(changepoint - 2).toString() + "-" + fixedpoint;
                    if (objarr.toString().indexOf(strtemp) != -1) {//正方1 反方2 共3 继续反方判断
                        chesscount = 3;
                        strtemp = getStr(x, y, -3, direction); //(changepoint - 3).toString() + "-" + fixedpoint;
                        if (objarr.toString().indexOf(strtemp) != -1) {//正方1 反方3 共4 继续反方判断
                            chesscount = 4;
                            strtemp = getStr(x, y, -4, direction); //(changepoint - 4).toString() + "-" + fixedpoint;
                            if (objarr.toString().indexOf(strtemp) != -1) {//正方1 反方4 共5 返回
                                return chesscount=5;
                            }
                        }
                    }
                }
            }
            return chesscount;
        }
        function getStr(x, y, changeindex,direction) {
            var str = "";
            switch (direction) {
                case 0: //垂直 y变化
                    str = x + "-" + (y + changeindex).toString();
                    break;
                case 1: //水平 x变化
                    str = (x + changeindex).toString() + "-" + y;
                    break;
                case 2: //2=45度(正方 x加y加)
                    str = (x + changeindex).toString() + "-" + (y + changeindex).toString();
                    break;
                case 3: //3=135度(正方 x加y减)
                    str = (x + changeindex).toString() + "-" + (y - changeindex).toString();
                    break;
            }
            return str;
        }
        function showCurrent(info) {
            JScriptLib.$("showinfo", 0).innerHTML = "当期执子为:<font color=red>" + info + "</font>";
        }
        function cancelGame() {
            var b1 = JScriptLib.$("b1", 0);
            b1.innerText = "";
            b1.style.border = "none";
            JScriptLib.$("z2", 0).innerText = "";
            chesscount = 1;
            w = [];
            b = [];
            flag = 0;
        }
    </script>
</head>
<body>
<!------- 头部开始 ------->
<div class="top">五子棋
<p id="showinfo"></p>
</div>
<!--头部结尾-->
<div class="middle">
<!------- 左边开始 ------->
<div class="left">
<h4>五子棋设置</h4>
<ul>
<li>棋盘大小
    <select id="chessboard">
    <option value="29">30*30</option>
    </select>
</li>
<li>棋子大小
    <select>
    <option>20px</option>
    </select>
</li>
<li><input type="button" value="开始游戏" onclick="startGame();" /></li>
<li><input type="button" value="重置设置" onclick="cancelGame();" /></li>
</ul>
</div>
<!-- 左边结尾 -->
<!-------- 右边开始 -------->
<div id="right">
<div id="b1"></div>
<div id="z2"></div>
</div>
<!--右边结尾 -->
</div>
<!--中部内容结尾-->
<!-------- 底部开始 -------->
<div class="bottom">版权</div>
<!-- 底部结尾 -->
</body>
</html>

 

c++版五子棋 源代码,2009 //去年写的命令行版的,凑合着看看 //版权所有 axun, //时间,2009/8/? c++版的五子棋,命令行界面 有基本的功能包括:电脑AI,双人对战,存档和读档等。 通过输入坐标下子 注意事项: 输入坐标用空格隔开,例如 5 13 坐标位置见棋盘边上 效果图: 开始菜单 人机对战界面: 下载地址: http://d 阅读详情

相关推荐

用JavaScript开发五子棋游戏

JavaScript是一种轻量级的编程语言,广泛用于网页的动态交互设计。它是构成Web技术的三大核心技术之一,另外两个是HTML和CSS。JavaScript的作用是为网页添加各式各样的交互功能,使得用户可以与网页内容进行更丰富的互动。在实现一个棋类游戏时,胜负条件是游戏规则的核心部分。对于不同的棋类游戏,胜负条件可能大相径庭。例如,在五子棋中,一连五子为胜;而在国际象棋中,将军后的王被将死则为负。因此,在编写胜负判断机制之前,首先需要明确游戏的胜利条件是什么,并将其转换为可计算的逻辑。

weixin_42596214的博客 713

用js实现五子棋

思路: 1、先用canvas画五子棋的棋盘 2、获取鼠标点击的位置 3、根据鼠标点击的位置判断,并画棋子 4、根据下的棋子判断是否赢了 * { padding: 0; margin: 0; } canvas { margin: 10p

安静的对折的专栏 983

五子棋AI人机对战:项目与实践

人工智能(AI)算法是模仿、延伸和扩展人类智能的技术。它们使得计算机能够执行需要人类智能的任务,如视觉感知、语音识别、决策和语言翻译。在五子棋这样的游戏环境中,AI算法通过模拟人类的思考和决策过程来计算最优的落子位置。AI算法可以被分为以下几种类型:基于规则的算法:利用预设的规则来进行决策。基于搜索的算法:如Minimax算法,利用搜索空间来找到最优解。机器学习算法:通过训练数据自动改进模型,包括监督学习和非监督学习。深度学习算法。

weixin_42577243的博客 2444

用JS编写一个简单的五子棋游戏

简单五子棋游戏,就像小时候课间在纸上玩的一样,我用的是js进行实现

boolbirdm的博客 648

使用JavaScript与Creator实现五子棋AI对战

五子棋游戏逻辑的核心在于判断胜负,其包含了棋盘的初始化、落子规则、行棋判断和胜利条件等多个方面。在这一部分,我们将深入探讨如何用JavaScript编写这些核心逻辑。// 示例:棋盘初始化动画系统和粒子系统是游戏引擎中用于创建动态视觉效果的工具。它们极大地增强了游戏的真实感和沉浸感。动画系统允许开发者对游戏对象的属性(如位置、旋转、缩放)进行关键帧动画处理。在Cocos Creator中,动画可以通过动画编辑器制作,也可以通过脚本控制,例如:cc.Class({},start() {

weixin_33298352的博客 701

五子棋胜负判断代码

利用python代码实现五子棋胜负判定

js实现五子棋落子,判定结果

黑子先行不可让子上下、左右、右上左下、左上右下,四个方向有一个方向连成5子即获胜。

wwtx2048的博客 546

五子棋游戏判断输赢

这是一个五子棋的小游戏,可以通过鼠标触摸技术完成下棋操作,并弹出对话框判断输赢

五子棋(C语言)

【问题描述】 已知两人分别执白棋和黑棋在一个围棋棋盘上下五子棋,若同一颜色的棋子在同一条横行、纵行或斜线上连成5个棋子,则执该颜色棋子的人获胜。编写程序读入某一时刻下棋的状态,并判断是否有人获胜。 输入的棋盘大小是19×19,用数字0表示空位置(即没有棋子),用数字1表示该位置下了一白色棋子,用数字2表示该位置下了一黑色棋子。假设同一颜色的棋子在同一条横行、纵行或斜线上连成的棋子个数不会超过5个,...

Running Snail 2482

教程 | 基于遥感生态指数(RSEI)模型的生态环境质量评价

使用数据:Landsat8 OLI数据,行列号:122036,时间:20210527。 使用软件:ENVI5.3、ArcGIS10.2 二、4个指数计算 下述的四个指数的计算均是通过ENVI软件中的Band math工具进行计算。 (1)绿度指数 在常用的植被指数当中,归一化植被指数 ( NDVI) 能够有效地反映植被的生长情况与植被 覆盖度等重要植被的物理性质,检测灵敏度高,能 够较为真实地展现区域的地表空间变化规律,已经得到广泛利用,本文采用 NDVI 指数来代表绿度指数。 在ENV

YW_remote的博客 1万+

cadence CIS 库建立--建立自己维护的CIS数据库

遇到一个问题,在使用cadecnce的时候,就是没有自己的本地/分享的数据库。 在画原理图或者PCB的时候,如果能搭建一个自己的数据库,在局域网或者本地 就好了。出于这样的想法,做了一些探索,找到了一种可能的答案。 由于数据库编制知识的缺乏,要自己建一个数据库似乎花费的时间会比较多。 偶发奇想,如果能够改编CIS 自带的数据库 另建立副本进行维护 就能够省下不少麻烦。 先说下CIS 是个啥。网上一搜:总之CIS 是个好东西。 功能强大。 点击CIS capture 中的 Options CIS Config

qq_29776365的博客 2万+

JS五子棋

推荐在HBuilder上写 本文实例为大家分享了js实现五子棋的具体代码,供大家参考,具体内容如下 思路: 1、先用canvas画五子棋的棋盘 2、获取鼠标点击的位置 3、根据鼠标点击的位置判断,并画棋子 4、根据下的棋子判断是否赢了 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset...

天予不洗头的博客 2664

共享最近邻相似度

共享最近邻相似度 第三十四次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。本文作为基于图的聚类的第二部分,主要针对“共享最近邻相似度(Shared Nearest Neighbour)”以及使用该度量的“Jarvis-Patrick聚类”进行介绍。其他基于图的聚类算法的链接可以在这篇综述《基于图的聚类算法综述(基于图的聚类算法开篇)》的结尾找到。 S...

Ἥλιος 7607

五子棋中的算法实现:如何判断胜负?(附完整代码)

摸鱼游戏五子棋的实现思路与算法选择。可执行代码在文章最后。

RenGJ010617的博客 5970

CentOS7下Node.js v20+安装与常见依赖库问题解决指南

本文详细介绍了在CentOS7系统下安装Node.js v20+的完整流程及常见依赖库问题的解决方案。通过升级glibc到2.28+、配置环境变量以及处理libstdc++版本问题,帮助开发者顺利在老旧系统上部署最新版Node.js,提升开发效率。

weixin_30689307的博客 157

BAT031:按列表名单将路径a下的文件夹批量剪切到路径b

摘要:按列表名单将路径a下的文件夹批量剪切到路径b。

qq_31762031的博客 1220

学弟学妹看我文章顺利毕业,基于HTML+Javascript五子棋人机博弈系统设计与实现《记得收藏》

基于HTML+Javascript五子棋人机博弈系统设计与实现《记得收藏》目录????️‍????1、需求分析1.1.1、功能性需求分析 目录 ????开讲啦!!!! ????️‍????1、需求分析 1.1.1、功能性需求分析 本系统的主要功能是人机在线进行对弈, 能统计下棋的棋数目以及输赢的总数。 能对用户名进行修改,使用vcsode开发,基于win10操作系统开发的在线人机对弈平台,阐述了系统的总体架构,逻辑,并且说明了系统的总体设计的策略。说明了本软件的需求规格。人机五子棋博弈项目,

苏州程序大白的博客 3994

rosbag分析传感器数据的时间同步情况方法

ROS传感器时间同步分析流程:通过rosbaginfo初步检查bag文件信息,使用rqt_bag可视化时间线分布,采用rostopicecho或Python脚本提取各传感器时间戳并计算时间差统计值(均值/最大差/标准差),最后分析接收与采样时间延迟。量化评估同步精度,识别固定偏移或随机抖动问题,确保多传感器数据对齐,为后续融合处理提供可靠数据基础。

start_up_go的博客 201

【硬核实战】从零打造智能五子棋AI:JavaScript实现与算法深度解析

五子棋作为中国传统棋类游戏,规则简单却变化无穷。本文将带你用纯前端技术实现一个具备AI对战功能的五子棋游戏,并深度解析其中的算法奥秘。这个项目不仅适合前端开发者学习,也是算法爱好者研究博弈树的绝佳案例。技术栈:HTML5 + CSS3 + JavaScript(无任何第三方库) 设计细节:采用四方向扫描法,相比传统的全盘扫描效率提升87%: 🧠 三、AI核心算法深度解析 3.1 评估函数设计 采用动态权重评分机制: 3.2 极大极小算法实现 通过递归搜索构建博弈树: 算法优化点:传统方案需要检查225个

白泽的博客 2832

【第13话:感知算法】库位与可行驶区域检测:自主泊车场景中的检测及语义分割方法

本文提出了一种自动泊车系统中的泊车库位线检测方法,通过逆透视映射(IPM)将车辆摄像头图像转换为鸟瞰视图,消除透视变形。该方法结合目标检测和语义分割模型,先定位库位线候选区域,再生成像素级精确掩码。后处理步骤将掩码转换为结构化输出,包括停车位边界多边形和可行驶区域掩码。整个流程采用深度学习模型和计算机视觉技术,可实现高精度的泊车环境感知,为自动泊车系统提供可靠支持。

一碗白开水一 1161

SmartFusion从FPGA到ARM(九)——串口命令解析器的实现

系列教程:SmartFusion从FPGA到ARM系列教程 前面两节介绍了MSS_UART和CoreUARTapb的使用: MSS_UART的使用 CoreUARTapb的使用 MSS_UART和CoreUARTapb都支持中断和轮询方式获取串口接收的数据,对于串口中断服务函数,有时我们需要通过不同的串口指令去执行不同的动作,下面以CoreUARTapb为例,来实现一个简单的串口命令解析器。固定串口数据帧格式,帧长度不定。 串口数据帧格式:* + 数据 + #,对于数据中为参数的,可以自定义处理函数。例

whik1194的博客 1535

JS五子棋(AI)

JS五子棋的简单AI实现

whrjxyygx的专栏 1094

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

《重温JavaScript五子棋》

js实现五子棋小游戏

weixin_45511682的博客 811

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

从零实现Js五子棋游戏:完整教程

在这篇教程中,我们将一步步实现一个具有AI对手的五子棋游戏。通过这个项目,你将学习到:我们的游戏界面包含三个主要部分: 1.2 CSS样式设计 我们使用CSS Grid来创建棋盘,使用渐变效果让棋子看起来更立体: 2. 游戏核心逻辑 2.1 初始化游戏 首先,我们需要创建棋盘并初始化游戏状态: 2.2 落子判定 在每次落子时,我们需要: 2.3 胜负判定 五子棋的胜负判定需要检查四个方向的连子情况: 3. AI实现 3.1 位置评估 AI的核心是评估每个可能的落子位置的价值。我们考虑以下因素: 3.2 AI

exlink2012的专栏 1781

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

html + js 实现五子棋 (一 )

五子棋原码 给大家 分享下 五子棋 原码 下边的代码直接放到 自己在本地创建一个 HTML 页面 复制 粘贴到里面就OK了 效果图: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;"> <title...

乐逍遥 880

js+canvas实现AI五子棋小游戏_☆往事随風☆的博客

使用 js+canvas+less 制作一个简易的五子棋小游戏,游戏自带AI电脑下棋,并且带有悔棋功能。这里只介绍一下js部分,其它部分请查看源码。

☆往事随風☆的博客 3649
上一篇: oracle 存储过程复习
下一篇: Web程序保存状态的方式
andycode
博客等级 码龄17年 12粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值