【编程游戏】贺岁放礼花。(第一名奖励10000可用分)(续2)

王集鹄 2009-01-04 05:21:29
加精
【编程游戏】贺岁放礼花。(第一名奖励10000可用分)(续2)
【编程游戏】贺岁放礼花。(第一名奖励10000可用分)(续1)
【编程游戏】贺岁放礼花。(第一名奖励10000可用分)
博客

(实时更新)
【编程游戏】贺岁放礼花。(点燃续帖2-154楼ZhangYaoxing的焰火)[img=http://community.csdn.net/ui/styles/default/images/new28.gif" alt="" />
【编程游戏】贺岁放礼花。(点燃续帖2-147楼xiuyouxu的焰火)(请在IE下运行)
【编程游戏】贺岁放礼花。(点燃续帖2-145楼KiteGirl的焰火)
【编程游戏】贺岁放礼花。(点燃续帖2-142楼sharp_ice的焰火)
【编程游戏】贺岁放礼花。(点燃续帖2-141楼sharp_ice的焰火)
【编程游戏】贺岁放礼花。(点燃续帖2-133楼langtse的焰火)(修改自169楼Free_Wind22)
【编程游戏】贺岁放礼花。(点燃续帖2-132楼dh20156的焰火)
【编程游戏】贺岁放礼花。(点燃续帖2-123楼dh20156的焰火)
【编程游戏】贺岁放礼花。(点燃续帖2-8楼wcwtitxu的焰火)
【编程游戏】贺岁放礼花。(点燃续帖2-6楼lshdic的焰火)
【编程游戏】贺岁放礼花。(点燃续帖2-5楼zswang的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-194楼lshdic的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-188楼zswang的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-172楼yonghengdexingxing的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-164楼lshdic的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-145楼KiteGirl的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-143楼KiteGirl的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-142楼KiteGirl的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-141楼YH_Random的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-131楼lshdic的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-123楼cicadu的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-116楼cgisir的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-106楼cgisir的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-77楼muxrwc的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-58楼froole的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-56楼hongmaohouzi的焰火)(请在IE下运行)
【编程游戏】贺岁放礼花。(点燃续帖1-47楼0009的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-37楼muxrwc的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-36楼cgisir的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-24楼KiteGirl的焰火)
【编程游戏】贺岁放礼花。(点燃续帖1-18楼Free_Wind22的焰火)
【编程游戏】贺岁放礼花。(点燃201楼KiteGirl的焰火)
【编程游戏】贺岁放礼花。(点燃200楼KiteGirl的焰火)
【编程游戏】贺岁放礼花。(点燃190楼lshdic的焰火)(请在IE下运行)
【编程游戏】贺岁放礼花。(点燃175楼web_show的焰火)(修改自169楼Free_Wind22)
【编程游戏】贺岁放礼花。(点燃169楼Free_Wind22的焰火)
【编程游戏】贺岁放礼花。(点燃106楼zhanghezheng的焰火)(请在IE下运行)
【编程游戏】贺岁放礼花。(点燃78楼lsc1202001的焰火)
【编程游戏】贺岁放礼花。(点燃60楼Free_Wind22的焰火)
【编程游戏】贺岁放礼花。(点燃46楼dh20156的焰火)
【编程游戏】贺岁放礼花。(点燃34楼zjsfdxbao的焰火)
【编程游戏】贺岁放礼花。(点燃17楼dh20156的焰火)
已经加入投票,请大家参与评分。
...全文
4657 170 打赏 收藏 转发到动态 举报
写回复
用AI写文章
170 条回复
切换为时间正序
请发表友善的回复…
发表回复
Li103ZzZ 2011-03-24
  • 打赏
  • 举报
回复
很好,谢谢...
bing275349633 2011-01-08
  • 打赏
  • 举报
回复
这个怎么玩的啊?谁能教教我啊
UPC_思念 2010-08-14
  • 打赏
  • 举报
回复
学习 ,js有待于提高
shaluo520 2010-07-01
  • 打赏
  • 举报
回复
看看~~
打字员 2010-02-26
  • 打赏
  • 举报
回复
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMark一下
erwin1 2010-02-04
  • 打赏
  • 举报
回复
LZ敢开个放鞭炮贴不~嘿嘿
三哥大大 2010-01-06
  • 打赏
  • 举报
回复
学习了,烟花好看
ztlover 2009-12-30
  • 打赏
  • 举报
回复
留名
guangguang0512 2009-12-29
  • 打赏
  • 举报
回复
看烟花咯
zqtoo 2009-12-24
  • 打赏
  • 举报
回复
支持 顶
newqq 2009-12-24
  • 打赏
  • 举报
回复
好帖留名
Dogfish 2009-10-17
  • 打赏
  • 举报
回复
支持
dadizhilong 2009-03-25
  • 打赏
  • 举报
回复
不得不说一句。前辈们。你们真牛B。。。哈哈
王集鹄 2009-02-08
  • 打赏
  • 举报
回复
明天十五,过完结账。
iqlife 2009-01-22
  • 打赏
  • 举报
回复
不错啊。顶了,支持
phoenix_qiqi 2009-01-18
  • 打赏
  • 举报
回复
真有人气啊
ZhangYaoxing 2009-01-18
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>X Fireworks</title>
<style>
body {
background-color: #000;
}
</style>
<script type="text/javascript">
/*A zhangyx production. Enjoy it!*/
var H = document.documentElement.clientHeight;
var W = document.documentElement.clientWidth;
var G = 3;
var OFFSET_BOTTOM = 50;
var T_STEP = window.ActiveXObject ? 0.5 : 0.3;
var MAIN_BLAZE_SIZE = 15;
var MAIN_BLAZE_LASTS = Math.floor(Math.sqrt(2 * (H - OFFSET_BOTTOM) / G));
var BLAZE_SIZE = 15;
var BLAZE_COUNT = 20;
var BLAZE_ANGLE = 2 * Math.PI / BLAZE_COUNT;
var BLAZE_LASTS = 12;
var BLAZE_MAX_SPEED = 20;
var TRACK_SIZE = 15;
var TRACK_INTERVAL = 2;
var TRACK_LASTS = 4;
var FW_STYLE = [["*", "."], ["^", "."], ["*", "*"], [".", "."], ["o", "."], ["O", "o"]];
var TOTAL_FIREWORKS = 2;
function Fireworks() {
this.engine = new PhysicalEngine();
this.status = Fireworks.INIT;
this.blazes = [];
this.tracks = [];
this.intervalCounter = 0;
}
Fireworks.INIT = 0
Fireworks.RISING = 1;
Fireworks.PRE_BLAZE = 2;
Fireworks.BLAZE = 3;
Fireworks.DEAD = 4;
Fireworks.prototype = {
step: function() {
switch (this.status) {
case Fireworks.INIT:
this.blazes.push(this.engine.getMainBlaze());
this.status = Fireworks.RISING;
break;
case Fireworks.RISING:
this._commonManagement();
if (this.blazes[0].lasts <= 0) {
this.status = Fireworks.PRE_BLAZE;
}
break;
case Fireworks.PRE_BLAZE:
this.engine.getBlazes(this.blazes);
document.body.removeChild(this.blazes[0]);
this.blazes.shift();
this.status = Fireworks.BLAZE;
break;
case Fireworks.BLAZE:
this._commonManagement();
if (this.blazes[0].color.r <= 0) {
this.status = Fireworks.DEAD;
}
break;
case Fireworks.DEAD:
var remove = function(con) {
while (con.length != 0) {
document.body.removeChild(con[0]);
con.shift();
}
};
remove(this.blazes);
remove(this.tracks);
break;
}
},
_commonManagement: function() {
this.intervalCounter++;
this.intervalCounter %= TRACK_INTERVAL;
var length = this.blazes.length;
for (var i = 0; i < length; i++) {
var blaze = this.blazes[i];
this.engine.transBlaze(this.blazes[i]);
if (this.intervalCounter == 0) {
this.tracks.push(this.engine.getTrack(blaze));
}
}
var length = this.tracks.length;
for (var i = 0; i < length; i++) {
var track = this.tracks[i];
this.engine.transTrack(track);
if (track.lasts <= 0) {
this.tracks.shift();
length--;
i--;
document.body.removeChild(track);
}
}
}
};
function PhysicalEngine() {
var style = FW_STYLE[Math.round((FW_STYLE.length - 1) * Math.random())];
this.blazeChar = style[0];
this.trackChar = style[1];
}
PhysicalEngine.prototype = {
getMainBlaze: function() {
var blaze = document.createElement("div");
blaze.style.position = "absolute";
blaze.style.zIndex = 100;
blaze.lasts = MAIN_BLAZE_LASTS * (1 + Math.random()) / 2;
blaze.color = {
r: 255 * Math.random(),
g: 255 * Math.random(),
b: 255 * Math.random()
};
blaze.path = {
x: Math.round(W * Math.random()),
y: H - OFFSET_BOTTOM
};
blaze.speed = {
x: 0,
y: - G * blaze.lasts
};
blaze.size = MAIN_BLAZE_SIZE;
blaze.color.rd = blaze.color.r / blaze.lasts * T_STEP;
blaze.color.gd = blaze.color.g / blaze.lasts * T_STEP;
blaze.color.bd = blaze.color.b / blaze.lasts * T_STEP;
blaze.speed.xd = 0;
blaze.speed.yd = G * T_STEP;
blaze.innerHTML = this.blazeChar;
this._setCSS(blaze);
document.body.appendChild(blaze);
return blaze;
},
getBlazes: function(blazes) {
var mainBlaze = blazes[0];
var speed = (1 + Math.random()) / 2 * BLAZE_MAX_SPEED;
var speedType = Math.round(Math.random());
var accType = Math.round(Math.random());
for (var i = 0; i < BLAZE_COUNT; i++) {
var blaze = document.createElement("div");
blaze.style.position = "absolute";
blaze.style.zIndex = 100;
blaze.lasts = BLAZE_LASTS;
blaze.color = {
r: 255 * Math.random(),
g: 255 * Math.random(),
b: 255 * Math.random()
};
blaze.path = {
x: mainBlaze.path.x,
y: mainBlaze.path.y
};
if (speedType) {
blaze.speed = {
x: speed * Math.cos(BLAZE_ANGLE * i),
y: speed * Math.sin(BLAZE_ANGLE * i)
}
} else {
blaze.speed = {
x: (1 + Math.random()) / 2 * BLAZE_MAX_SPEED * Math.cos(BLAZE_ANGLE * i),
y: (1 + Math.random()) / 2 * BLAZE_MAX_SPEED * Math.sin(BLAZE_ANGLE * i)
}
}
blaze.size = BLAZE_SIZE;
blaze.color.rd = blaze.color.r / BLAZE_LASTS * T_STEP
blaze.color.gd = blaze.color.g / BLAZE_LASTS * T_STEP
blaze.color.bd = blaze.color.b / BLAZE_LASTS * T_STEP
if (accType) {
blaze.speed.xd = blaze.speed.x / BLAZE_LASTS * T_STEP;
blaze.speed.yd = (blaze.speed.y / BLAZE_LASTS + G) * T_STEP;
} else {
blaze.speed.xd = 0;
blaze.speed.yd = 0;
}
blaze.innerHTML = this.blazeChar;
this._setCSS(blaze);
document.body.appendChild(blaze);
blazes.push(blaze);
}
},
getTrack: function(blaze) {
var track = document.createElement("div");
track.style.position = "absolute";
track.style.zIndex = 50;
track.lasts = TRACK_LASTS
track.color = {
r: blaze.color.r,
g: blaze.color.g,
b: blaze.color.b
}
track.path = {
x: blaze.path.x,
y: blaze.path.y
};
track.size = TRACK_SIZE;
track.color.rd = track.color.r / track.lasts * T_STEP;
track.color.gd = track.color.g / track.lasts * T_STEP;
track.color.bd = track.color.b / track.lasts * T_STEP;
track.innerHTML = this.trackChar;
this._setCSS(track);
document.body.appendChild(track);
return track;
},
transBlaze: function(blaze) {
blaze.color.r -= blaze.color.rd;
blaze.color.g -= blaze.color.gd;
blaze.color.b -= blaze.color.bd;
blaze.path.x += blaze.speed.x * T_STEP;
blaze.path.y += blaze.speed.y * T_STEP;
blaze.speed.x += blaze.speed.xd;
blaze.speed.y += blaze.speed.yd;
blaze.lasts -= T_STEP;
this._setCSS(blaze);
},
transTrack: function(track) {
track.color.r -= track.color.rd;
track.color.g -= track.color.gd;
track.color.b -= track.color.bd;
track.lasts -= T_STEP;
},
_setCSS: function(obj) {
var style = obj.style;
style.left = Math.floor(obj.path.x) + "px";
style.top = Math.floor(obj.path.y) + "px";
style.fontSize = obj.size + "px";
style.color = "rgb(" + Math.floor(obj.color.r) + "," + Math.floor(obj.color.g) + "," + Math.floor(obj.color.b) + ")";
}
};
function setOut() {
var container = [];
for (var i = 0; i < TOTAL_FIREWORKS; i++) {
container.push(new Fireworks());
}
window.setInterval(function() {
for (var i = 0; i < TOTAL_FIREWORKS; i++) {
container[i].step();
if (container[i].status == Fireworks.DEAD) {
container[i].step();
container[i] = new Fireworks();
}
}
}, 10);
}
</script>
</head>
<body onload="setOut();"></body>
</html>

ZhangYaoxing 2009-01-18
  • 打赏
  • 举报
回复
注释一下,大家可以根据自己喜好调整以下参数以达到理想的效果
var G = 6; // 重力加速度
var T_STEP = window.ActiveXObject ? 0.5 : 0.3; // 时间单位,越小画面越细腻
var MAIN_BLAZE_SIZE = 15; // 主焰火尺寸(px)
var BLAZE_SIZE = 15; // 炸开后单个焰火尺寸(px)
var BLAZE_COUNT = 20; // 炸开的焰火数量
var BLAZE_LASTS = 8; // 炸开焰火的持续时间
var BLAZE_MAX_SPEED = 20; // 炸开焰火的最大初速度
var TRACK_SIZE = 15; // 单个焰火轨迹尺寸
var TRACK_INTERVAL = 2; // 产生轨迹的时间间隔
var TRACK_LASTS = 2; // 轨迹持续时间
var FW_STYLE = [["*", "."], ["^", "."], ["*", "*"], [".", "."], ["o", "."], ["O", "o"]]; // 焰火样式。前面是焰火样式,后面是轨迹样式
var TOTAL_FIREWORKS = 2; // 屏幕上同时存在的焰火个数
ZhangYaoxing 2009-01-18
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>X Fireworks</title>
<style>
body {
background-color: #000;
}
</style>
<script type="text/javascript">
/*A zhangyx production. Enjoy it!*/
var H = document.documentElement.clientHeight;
var W = document.documentElement.clientWidth;
var G = 6;
var OFFSET_BOTTOM = 50;
var T_STEP = window.ActiveXObject ? 0.5 : 0.3;
var MAIN_BLAZE_SIZE = 15;
var MAIN_BLAZE_LASTS = Math.floor(Math.sqrt(2 * (H - OFFSET_BOTTOM) / G));
var BLAZE_SIZE = 15;
var BLAZE_COUNT = 20;
var BLAZE_ANGLE = 2 * Math.PI / BLAZE_COUNT;
var BLAZE_LASTS = 8;
var BLAZE_MAX_SPEED = 20;
var TRACK_SIZE = 15;
var TRACK_INTERVAL = 2;
var TRACK_LASTS = 2;
var FW_STYLE = [["*", "."], ["^", "."], ["*", "*"], [".", "."], ["o", "."], ["O", "o"]];
var TOTAL_FIREWORKS = 2;
function Fireworks() {
this.engine = new PhysicalEngine();
this.status = Fireworks.INIT;
this.blazes = [];
this.tracks = [];
this.intervalCounter = 0;
}
Fireworks.INIT = 0
Fireworks.RISING = 1;
Fireworks.PRE_BLAZE = 2;
Fireworks.BLAZE = 3;
Fireworks.DEAD = 4;
Fireworks.prototype = {
step: function() {
switch (this.status) {
case Fireworks.INIT:
this.blazes.push(this.engine.getMainBlaze());
this.status = Fireworks.RISING;
break;
case Fireworks.RISING:
this._commonManagement();
if (this.blazes[0].lasts <= 0) {
this.status = Fireworks.PRE_BLAZE;
}
break;
case Fireworks.PRE_BLAZE:
this.engine.getBlazes(this.blazes);
document.body.removeChild(this.blazes[0]);
this.blazes.shift();
this.status = Fireworks.BLAZE;
break;
case Fireworks.BLAZE:
this._commonManagement();
if (this.blazes[0].color.r <= 0) {
this.status = Fireworks.DEAD;
}
break;
case Fireworks.DEAD:
var remove = function(con) {
while (con.length != 0) {
document.body.removeChild(con[0]);
con.shift();
}
};
remove(this.blazes);
remove(this.tracks);
break;
}
},
_commonManagement: function() {
this.intervalCounter++;
this.intervalCounter %= TRACK_INTERVAL;
var length = this.blazes.length;
for (var i = 0; i < length; i++) {
var blaze = this.blazes[i];
this.engine.transBlaze(this.blazes[i]);
if (this.intervalCounter == 0) {
this.tracks.push(this.engine.getTrack(blaze));
}
}
var length = this.tracks.length;
for (var i = 0; i < length; i++) {
var track = this.tracks[i];
this.engine.transTrack(track);
if (track.lasts <= 0) {
this.tracks.shift();
length--;
i--;
document.body.removeChild(track);
}
}
}
};
function PhysicalEngine() {
var style = FW_STYLE[Math.round((FW_STYLE.length - 1) * Math.random())];
this.blazeChar = style[0];
this.trackChar = style[1];
}
PhysicalEngine.prototype = {
getMainBlaze: function() {
var blaze = document.createElement("div");
blaze.style.position = "absolute";
blaze.style.zIndex = 100;
blaze.lasts = MAIN_BLAZE_LASTS * (1 + Math.random()) / 2;
blaze.color = {
r: 255 * Math.random(),
g: 255 * Math.random(),
b: 255 * Math.random()
};
blaze.path = {
x: Math.round(W * Math.random()),
y: H - OFFSET_BOTTOM
};
blaze.speed = {
x: 0,
y: - G * blaze.lasts
};
blaze.size = MAIN_BLAZE_SIZE;
blaze.color.rd = blaze.color.r / blaze.lasts * T_STEP;
blaze.color.gd = blaze.color.g / blaze.lasts * T_STEP;
blaze.color.bd = blaze.color.b / blaze.lasts * T_STEP;
blaze.speed.xd = 0;
blaze.speed.yd = G * T_STEP;
blaze.innerHTML = this.blazeChar;
this._setCSS(blaze);
document.body.appendChild(blaze);
return blaze;
},
getBlazes: function(blazes) {
var mainBlaze = blazes[0];
var speed = (1 + Math.random()) / 2 * BLAZE_MAX_SPEED;
var speedType = Math.round(Math.random());
var accType = Math.round(Math.random());
for (var i = 0; i < BLAZE_COUNT; i++) {
var blaze = document.createElement("div");
blaze.style.position = "absolute";
blaze.style.zIndex = 100;
blaze.lasts = BLAZE_LASTS;
blaze.color = {
r: 255 * Math.random(),
g: 255 * Math.random(),
b: 255 * Math.random()
};
blaze.path = {
x: mainBlaze.path.x,
y: mainBlaze.path.y
};
if (speedType) {
blaze.speed = {
x: speed * Math.cos(BLAZE_ANGLE * i),
y: speed * Math.sin(BLAZE_ANGLE * i)
}
} else {
blaze.speed = {
x: (1 + Math.random()) / 2 * BLAZE_MAX_SPEED * Math.cos(BLAZE_ANGLE * i),
y: (1 + Math.random()) / 2 * BLAZE_MAX_SPEED * Math.sin(BLAZE_ANGLE * i)
}
}
blaze.size = BLAZE_SIZE;
blaze.color.rd = blaze.color.r / BLAZE_LASTS * T_STEP
blaze.color.gd = blaze.color.g / BLAZE_LASTS * T_STEP
blaze.color.bd = blaze.color.b / BLAZE_LASTS * T_STEP
if (accType) {
blaze.speed.xd = blaze.speed.x / BLAZE_LASTS * T_STEP;
blaze.speed.yd = (blaze.speed.y / BLAZE_LASTS + G) * T_STEP;
} else {
blaze.speed.xd = 0;
blaze.speed.yd = 0;
}
blaze.innerHTML = this.blazeChar;
this._setCSS(blaze);
document.body.appendChild(blaze);
blazes.push(blaze);
}
},
getTrack: function(blaze) {
var track = document.createElement("div");
track.style.position = "absolute";
track.style.zIndex = 50;
track.lasts = TRACK_LASTS
track.color = {
r: blaze.color.r,
g: blaze.color.g,
b: blaze.color.b
}
track.path = {
x: blaze.path.x,
y: blaze.path.y
};
track.size = TRACK_SIZE;
track.color.rd = track.color.r / track.lasts * T_STEP;
track.color.gd = track.color.g / track.lasts * T_STEP;
track.color.bd = track.color.b / track.lasts * T_STEP;
track.innerHTML = this.trackChar;
this._setCSS(track);
document.body.appendChild(track);
return track;
},
transBlaze: function(blaze) {
blaze.color.r -= blaze.color.rd;
blaze.color.g -= blaze.color.gd;
blaze.color.b -= blaze.color.bd;
blaze.path.x += blaze.speed.x * T_STEP;
blaze.path.y += blaze.speed.y * T_STEP;
blaze.speed.x += blaze.speed.xd;
blaze.speed.y += blaze.speed.yd;
blaze.lasts -= T_STEP;
this._setCSS(blaze);
},
transTrack: function(track) {
track.color.r -= track.color.rd;
track.color.g -= track.color.gd;
track.color.b -= track.color.bd;
track.lasts -= T_STEP;
},
_setCSS: function(obj) {
var style = obj.style;
style.left = Math.floor(obj.path.x) + "px";
style.top = Math.floor(obj.path.y) + "px";
style.fontSize = obj.size + "px";
style.color = "rgb(" + Math.floor(obj.color.r) + "," + Math.floor(obj.color.g) + "," + Math.floor(obj.color.b) + ")";
}
};
function setOut() {
var container = [];
for (var i = 0; i < TOTAL_FIREWORKS; i++) {
container.push(new Fireworks());
}
window.setInterval(function() {
for (var i = 0; i < TOTAL_FIREWORKS; i++) {
container[i].step();
if (container[i].status == Fireworks.DEAD) {
container[i].step();
container[i] = new Fireworks();
}
}
}, 10);
}
</script>
</head>
<body onload="setOut();"></body>
</html>
ZhangYaoxing 2009-01-18
  • 打赏
  • 举报
回复
为什么我的只有7999字节却贴不上去呢……
加载更多回复(148)

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧