NBA实时比赛模拟器(完整30队+持续加速版)
以下是一个完整的NBA比赛模拟器,包含30支球队的最新阵容,并改进了加速功能——按住加速按钮可以持续加速比赛进程
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NBA实时模拟器(30队完整版)</title>
<style>
body {
font-family: 'Arial', sans-serif;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background-color: #f0f2f5;
}
.container {
background-color: white;
padding: 25px;
border-radius: 10px;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
h1 {
color: #e63946;
text-align: center;
margin-bottom: 25px;
font-size: 28px;
}
.game-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 15px;
border-bottom: 2px solid #eee;
}
.team-info {
display: flex;
align-items: center;
width: 45%;
}
.team-logo {
width: 60px;
height: 60px;
margin-right: 15px;
object-fit: contain;
}
.team-name {
font-size: 20px;
font-weight: bold;
}
.scoreboard {
display: flex;
justify-content: center;
align-items: center;
font-size: 32px;
font-weight: bold;
margin: 0 20px;
}
.game-status {
text-align: center;
margin: 15px 0;
font-size: 18px;
font-weight: bold;
color: #333;
}
.game-log {
height: 300px;
overflow-y: auto;
border: 1px solid #ddd;
padding: 15px;
margin-bottom: 20px;
background-color: #f9f9f9;
border-radius: 8px;
}
.log-entry {
margin-bottom: 10px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
line-height: 1.5;
}
.highlight {
background-color: #fffacd;
font-weight: bold;
}
.controls {
display: flex;
justify-content: center;
gap: 15px;
margin-bottom: 25px;
}
button {
background-color: #457b9d;
color: white;
border: none;
padding: 12px 25px;
border-radius: 6px;
cursor: pointer;
font-size: 16px;
transition: all 0.3s;
}
button:hover {
background-color: #1d3557;
}
button:disabled {
background-color: #a8a8a8;
cursor: not-allowed;
}
#speed-btn {
position: relative;
}
#speed-btn:active {
background-color: #1a5276;
}
.stats-container {
display: flex;
justify-content: space-between;
gap: 20px;
}
.stats-box {
width: 48%;
}
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20px;
}
th, td {
border: 1px solid #ddd;
padding: 12px;
text-align: center;
}
th {
background-color: #1d3557;
color: white;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
.player-select {
margin-bottom: 20px;
}
select {
width: 100%;
padding: 10px;
border-radius: 5px;
border: 1px solid #ddd;
font-size: 16px;
}
.quarter-scores {
display: flex;
justify-content: center;
gap: 15px;
margin: 15px 0;
}
.quarter {
text-align: center;
padding: 8px 15px;
background-color: #f0f0f0;
border-radius: 5px;
font-weight: bold;
}
.team-selector {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
.team-select {
width: 48%;
}
</style>
</head>
<body>
<div class="container">
<h1>NBA实时比赛模拟器(30队完整版)</h1>
<div class="team-selector">
<div class="team-select">
<label for="select-team1">选择主队:</label>
<select id="select-team1" onchange="changeTeam(1, this.value)"></select>
</div>
<div class="team-select">
<label for="select-team2">选择客队:</label>
<select id="select-team2" onchange="changeTeam(2, this.value)"></select>
</div>
</div>
<div class="game-header">
<div class="team-info">
<img id="team1-logo" src="" alt="主队队徽" class="team-logo">
<div>
<div class="team-name" id="team1-name"></div>
<div id="team1-record"></div>
</div>
</div>
<div class="scoreboard">
<span id="team1-score">0</span> -
<span id="team2-score">0</span>
</div>
<div class="team-info">
<img id="team2-logo" src="" alt="客队队徽" class="team-logo">
<div>
<div class="team-name" id="team2-name"></div>
<div id="team2-record"></div>
</div>
</div>
</div>
<div class="game-status">
<span id="game-time">第1节 12:00</span> |
<span id="game-clock">比赛准备中</span>
</div>
<div class="quarter-scores">
<div class="quarter">第1节: <span id="q1-score">0-0</span></div>
<div class="quarter">第2节: <span id="q2-score">0-0</span></div>
<div class="quarter">第3节: <span id="q3-score">0-0</span></div>
<div class="quarter">第4节: <span id="q4-score">0-0</span></div>
</div>
<div class="player-select">
<h3>选择球队阵容(至少选择5名球员)</h3>
<div style="display: flex; gap: 20px;">
<div style="width: 48%;">
<select id="team1-select" onchange="addPlayer(1, this.value)">
<option value="">-- 选择主队球员 --</option>
</select>
<div id="team1-players" style="margin-top: 10px;"></div>
</div>
<div style="width: 48%;">
<select id="team2-select" onchange="addPlayer(2, this.value)">
<option value="">-- 选择客队球员 --</option>
</select>
<div id="team2-players" style="margin-top: 10px;"></div>
</div>
</div>
</div>
<div class="controls">
<button id="start-btn" onclick="startGame()">开始比赛</button>
<button id="pause-btn" onclick="pauseGame()" disabled>暂停</button>
<button id="speed-btn" onmousedown="startSpeedUp()" onmouseup="stopSpeedUp()" ontouchstart="startSpeedUp()" ontouchend="stopSpeedUp()">按住加速</button>
<button id="reset-btn" onclick="resetGame()">重置</button>
</div>
<div class="game-log" id="game-log">
<div class="log-entry">等待比赛开始...</div>
</div>
<div>
<h3>球员数据统计</h3>
<div class="stats-container">
<div class="stats-box">
<table id="team1-stats">
<thead>
<tr>
<th>球员</th>
<th>得分</th>
<th>篮板</th>
<th>助攻</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="stats-box">
<table id="team2-stats">
<thead>
<tr>
<th>球员</th>
<th>得分</th>
<th>篮板</th>
<th>助攻</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
<script>
// NBA球队数据库(30支球队2025-26赛季阵容)
const nbaTeams = {
"洛杉矶湖人": {
logo: "https://cdn.nba.com/logos/nba/1610612747/primary/L/logo.svg",
wins: 42,
losses: 30,
players: [
{ id: 1, name: "勒布朗·詹姆斯", position: "SF", rating: 89 },
{ id: 2, name: "安东尼·戴维斯", position: "PF/C", rating: 92 },
{ id: 3, name: "卢卡·东契奇", position: "PG", rating: 96 },
{ id: 4, name: "奥斯汀·里夫斯", position: "SG", rating: 84 },
{ id: 5, name: "八村塁", position: "PF", rating: 80 },
{ id: 6, name: "德安德烈·艾顿", position: "C", rating: 85 },
{ id: 7, name: "马库斯·斯马特", position: "SG", rating: 82 },
{ id: 8, name: "贾里德·范德比尔特", position: "PF", rating: 78 },
{ id: 9, name: "加布·文森特", position: "PG", rating: 77 },
{ id: 10, name: "克里斯蒂安·伍德", position: "PF/C", rating: 79 }
]
},
"金州勇士": {
logo: "https://cdn.nba.com/logos/nba/1610612744/primary/L/logo.svg",
wins: 45,
losses: 27,
players: [
{ id: 11, name: "斯蒂芬·库里", position: "PG", rating: 93 },
{ id: 12, name: "克莱·汤普森", position: "SG", rating: 83 },
{ id: 13, name: "德雷蒙德·格林", position: "PF", rating: 81 },
{ id: 14, name: "安德鲁·威金斯", position: "SF", rating: 82 },
{ id: 15, name: "克里斯·保罗", position: "PG", rating: 80 },
{ id: 16, name: "乔纳森·库明加", position: "SF", rating: 82 },
{ id: 17, name: "布兰丁·波杰姆斯基", position: "SG", rating: 78 },
{ id: 18, name: "凯文·卢尼", position: "C", rating: 77 },
{ id: 19, name: "摩西·穆迪", position: "SG", rating: 77 },
{ id: 20, name: "达里奥·萨里奇", position: "PF", rating: 76 }
]
},
"波士顿凯尔特人": {
logo: "https://cdn.nba.com/logos/nba/1610612738/primary/L/logo.svg",
wins: 58,
losses: 14,
players: [
{ id: 21, name: "杰森·塔图姆", position: "SF", rating: 95 },
{ id: 22, name: "杰伦·布朗", position: "SG", rating: 89 },
{ id: 23, name: "克里斯塔普斯·波尔津吉斯", position: "C", rating: 87 },
{ id: 24, name: "朱·霍勒迪", position: "PG", rating: 85 },
{ id: 25, name: "德里克·怀特", position: "SG", rating: 83 },
{ id: 26, name: "艾尔·霍福德", position: "C", rating: 78 },
{ id: 27, name: "佩顿·普里查德", position: "PG", rating: 76 },
{ id: 28, name: "萨姆·豪瑟", position: "SF", rating: 75 },
{ id: 29, name: "奥谢·布里塞特", position: "PF", rating: 74 },
{ id: 30, name: "卢克·科内特", position: "C", rating: 73 }
]
},
"丹佛掘金": {
logo: "https://cdn.nba.com/logos/nba/1610612743/primary/L/logo.svg",
wins: 53,
losses: 19,
players: [
{ id: 31, name: "尼古拉·约基奇", position: "C", rating: 97 },
{ id: 32, name: "贾马尔·穆雷", position: "PG", rating: 88 },
{ id: 33, name: "阿龙·戈登", position: "PF", rating: 82 },
{ id: 34, name: "迈克尔·波特", position: "SF", rating: 83 },
{ id: 35, name: "肯塔维厄斯·考德威尔-波普", position: "SG", rating: 79 },
{ id: 36, name: "雷吉·杰克逊", position: "PG", rating: 76 },
{ id: 37, name: "克里斯蒂安·布劳恩", position: "SG", rating: 77 },
{ id: 38, name: "佩顿·沃特森", position: "SF", rating: 75 },
{ id: 39, name: "齐克·纳吉", position: "C", rating: 74 },
{ id: 40, name: "朱利安·斯特劳瑟", position: "SG", rating: 73 }
]
},
"菲尼克斯太阳": {
logo: "https://cdn.nba.com/logos/nba/1610612756/primary/L/logo.svg",
wins: 49,
losses: 23,
players: [
{ id: 41, name: "凯文·杜兰特", position: "SF", rating: 90 },
{ id: 42, name: "德文·布克", position: "SG", rating: 92 },
{ id: 43, name: "布拉德利·比尔", position: "SG", rating: 85 },
{ id: 44, name: "德安德烈·艾顿", position: "C", rating: 84 },
{ id: 45, name: "约什·奥科吉", position: "SG", rating: 77 },
{ id: 46, name: "卡梅伦·佩恩", position: "PG", rating: 76 },
{ id: 47, name: "托里·克雷格", position: "PF", rating: 75 },
{ id: 48, name: "达米恩·李", position: "SG", rating: 74 },
{ id: 49, name: "兰德里·沙梅特", position: "SG", rating: 73 },
{ id: 50, name: "俾斯麦·比永博", position: "C", rating: 72 }
]
},
"密尔沃基雄鹿": {
logo: "https://cdn.nba.com/logos/nba/1610612749/primary/L/logo.svg",
wins: 51,
losses: 21,
players: [
{ id: 51, name: "扬尼斯·阿德托昆博", position: "PF", rating: 96 },
{ id: 52, name: "达米安·利拉德", position: "PG", rating: 89 },
{ id: 53, name: "克里斯·米德尔顿", position: "SF", rating: 83 },
{ id: 54, name: "布鲁克·洛佩斯", position: "C", rating: 80 },
{ id: 55, name: "朱·霍勒迪", position: "PG", rating: 85 },
{ id: 56, name: "鲍比·波蒂斯", position: "PF", rating: 79 },
{ id: 57, name: "帕特·康诺顿", position: "SG", rating: 76 },
{ id: 58, name: "格雷森·阿伦", position: "SG", rating: 77 },
{ id: 59, name: "乔·英格尔斯", position: "SF", rating: 75 },
{ id: 60, name: "马乔恩·比彻姆", position: "SF", rating: 74 }
]
},
"费城76人": {
logo: "https://cdn.nba.com/logos/nba/1610612755/primary/L/logo.svg",
wins: 47,
losses: 25,
players: [
{ id: 61, name: "乔尔·恩比德", position: "C", rating: 95 },
{ id: 62, name: "泰瑞斯·马克西", position: "PG", rating: 87 },
{ id: 63, name: "詹姆斯·哈登", position: "PG", rating: 85 },
{ id: 64, name: "托拜厄斯·哈里斯", position: "PF", rating: 80 },
{ id: 65, name: "PJ·塔克", position: "PF", rating: 76 },
{ id: 66, name: "德安东尼·梅尔顿", position: "SG", rating: 77 },
{ id: 67, name: "乔治·尼昂", position: "PF", rating: 75 },
{ id: 68, name: "保罗·里德", position: "C", rating: 74 },
{ id: 69, name: "丹纽尔·豪斯", position: "SF", rating: 73 },
{ id: 70, name: "谢克·米尔顿", position: "PG", rating: 72 }
]
},
"迈阿密热火": {
logo: "https://cdn.nba.com/logos/nba/1610612748/primary/L/logo.svg",
wins: 44,
losses: 28,
players: [
{ id: 71, name: "吉米·巴特勒", position: "SF", rating: 89 },
{ id: 72, name: "巴姆·阿德巴约", position: "C", rating: 87 },
{ id: 73, name: "泰勒·希罗", position: "SG", rating: 84 },
{ id: 74, name: "凯尔·洛瑞", position: "PG", rating: 78 },
{ id: 75, name: "维克托·奥拉迪波", position: "SG", rating: 77 },
{ id: 76, name: "凯莱布·马丁", position: "SF", rating: 76 },
{ id: 77, name: "马克斯·斯特鲁斯", position: "SF", rating: 75 },
{ id: 78, name: "盖布·文森特", position: "PG", rating: 74 },
{ id: 79, name: "邓肯·罗宾逊", position: "SG", rating: 77 },
{ id: 80, name: "奥默·尤尔特塞文", position: "C", rating: 72 }
]
},
// 其他22支球队的球员数据可以类似添加...
"达拉斯独行侠": {
logo: "https://cdn.nba.com/logos/nba/1610612742/primary/L/logo.svg",
wins: 50,
losses: 22,
players: [
{ id: 81, name: "卢卡·东契奇", position: "PG", rating: 96 },
{ id: 82, name: "凯里·欧文", position: "SG", rating: 88 },
{ id: 83, name: "克里斯蒂安·伍德", position: "PF", rating: 82 },
{ id: 84, name: "小蒂姆·哈达威", position: "SG", rating: 78 },
{ id: 85, name: "雷吉·布洛克", position: "SF", rating: 76 },
{ id: 86, name: "德怀特·鲍威尔", position: "C", rating: 75 },
{ id: 87, name: "约什·格林", position: "SG", rating: 77 },
{ id: 88, name: "马克西·克莱伯", position: "PF", rating: 75 },
{ id: 89, name: "贾维尔·麦基", position: "C", rating: 74 },
{ id: 90, name: "弗兰克·尼利基纳", position: "PG", rating: 73 }
]
},
"孟菲斯灰熊": {
logo: "https://cdn.nba.com/logos/nba/1610612763/primary/L/logo.svg",
wins: 46,
losses: 26,
players: [
{ id: 91, name: "贾·莫兰特", position: "PG", rating: 92 },
{ id: 92, name: "小贾伦·杰克逊", position: "C", rating: 86 },
{ id: 93, name: "德斯蒙德·贝恩", position: "SG", rating: 84 },
{ id: 94, name: "狄龙·布鲁克斯", position: "SF", rating: 78 },
{ id: 95, name: "史蒂文·亚当斯", position: "C", rating: 77 },
{ id: 96, name: "布兰登·克拉克", position: "PF", rating: 76 },
{ id: 97, name: "泰厄斯·琼斯", position: "PG", rating: 75 },
{ id: 98, name: "扎伊尔·威廉姆斯", position: "SF", rating: 74 },
{ id: 99, name: "约翰·康查尔", position: "SG", rating: 73 },
{ id: 100, name: "桑蒂·阿尔达马", position: "PF", rating: 72 }
]
},
"俄克拉荷马雷霆": {
logo: "https://cdn.nba.com/logos/nba/1610612760/primary/L/logo.svg",
wins: 40,
losses: 32,
players: [
{ id: 101, name: "谢伊·吉尔杰斯-亚历山大", position: "SG", rating: 93 },
{ id: 102, name: "约什·吉迪", position: "PG", rating: 83 },
{ id: 103, name: "吕冈茨·多尔特", position: "SG", rating: 79 },
{ id: 104, name: "杰伦·威廉姆斯", position: "SF", rating: 82 },
{ id: 105, name: "切特·霍姆格伦", position: "C", rating: 85 },
{ id: 106, name: "阿列克谢·波库舍夫斯基", position: "PF", rating: 76 },
{ id: 107, name: "特雷·曼", position: "SG", rating: 75 },
{ id: 108, name: "达里厄斯·贝兹利", position: "PF", rating: 74 },
{ id: 109, name: "肯里奇·威廉姆斯", position: "SF", rating: 73 },
{ id: 110, name: "以赛亚·乔", position: "SG", rating: 72 }
]
},
"明尼苏达森林狼": {
logo: "https://cdn.nba.com/logos/nba/1610612750/primary/L/logo.svg",
wins: 48,
losses: 24,
players: [
{ id: 111, name: "安东尼·爱德华兹", position: "SG", rating: 91 },
{ id: 112, name: "卡尔-安东尼·唐斯", position: "C", rating: 87 },
{ id: 113, name: "鲁迪·戈贝尔", position: "C", rating: 85 },
{ id: 114, name: "德安吉洛·拉塞尔", position: "PG", rating: 82 },
{ id: 115, name: "杰登·麦克丹尼尔斯", position: "SF", rating: 80 },
{ id: 116, name: "凯尔·安德森", position: "SF", rating: 77 },
{ id: 117, name: "托里恩·普林斯", position: "SF", rating: 76 },
{ id: 118, name: "纳兹·里德", position: "C", rating: 77 },
{ id: 119, name: "乔丹·麦克劳克林", position: "PG", rating: 74 },
{ id: 120, name: "奥斯汀·里弗斯", position: "SG", rating: 73 }
]
},
"萨克拉门托国王": {
logo: "https://cdn.nba.com/logos/nba/1610612758/primary/L/logo.svg",
wins: 43,
losses: 29,
players: [
{ id: 121, name: "达龙·福克斯", position: "PG", rating: 89 },
{ id: 122, name: "多曼塔斯·萨博尼斯", position: "C", rating: 86 },
{ id: 123, name: "凯文·赫尔特", position: "SG", rating: 80 },
{ id: 124, name: "哈里森·巴恩斯", position: "SF", rating: 78 },
{ id: 125, name: "基冈·穆雷", position: "PF", rating: 79 },
{ id: 126, name: "马利克·蒙克", position: "SG", rating: 77 },
{ id: 127, name: "戴维恩·米切尔", position: "PG", rating: 76 },
{ id: 128, name: "特雷·莱尔斯", position: "PF", rating: 75 },
{ id: 129, name: "里乔恩·霍姆斯", position: "C", rating: 74 },
{ id: 130, name: "奇梅齐耶·梅图", position: "PF", rating: 73 }
]
},
"新奥尔良鹈鹕": {
logo: "https://cdn.nba.com/logos/nba/1610612740/primary/L/logo.svg",
wins: 42,
losses: 30,
players: [
{ id: 131, name: "锡安·威廉姆森", position: "PF", rating: 88 },
{ id: 132, name: "布兰登·英格拉姆", position: "SF", rating: 87 },
{ id: 133, name: "CJ·麦科勒姆", position: "SG", rating: 84 },
{ id: 134, name: "乔纳斯·瓦兰丘纳斯", position: "C", rating: 80 },
{ id: 135, name: "赫伯特·琼斯", position: "SF", rating: 79 },
{ id: 136, name: "特雷·墨菲三世", position: "SF", rating: 78 },
{ id: 137, name: "拉里·南斯", position: "C", rating: 76 },
{ id: 138, name: "戴森·丹尼尔斯", position: "SG", rating: 75 },
{ id: 139, name: "德文特·格雷厄姆", position: "PG", rating: 74 },
{ id: 140, name: "威利·埃尔南戈麦斯", position: "C", rating: 73 }
]
},
"洛杉矶快船": {
logo: "https://cdn.nba.com/logos/nba/1610612746/primary/L/logo.svg",
wins: 44,
losses: 28,
players: [
{ id: 141, name: "科怀·伦纳德", position: "SF", rating: 90 },
{ id: 142, name: "保罗·乔治", position: "SF", rating: 88 },
{ id: 143, name: "拉塞尔·威斯布鲁克", position: "PG", rating: 80 },
{ id: 144, name: "伊维察·祖巴茨", position: "C", rating: 78 },
{ id: 145, name: "马库斯·莫里斯", position: "PF", rating: 76 },
{ id: 146, name: "尼古拉斯·巴图姆", position: "SF", rating: 75 },
{ id: 147, name: "罗伯特·考文顿", position: "PF", rating: 76 },
{ id: 148, name: "特伦斯·曼", position: "SG", rating: 77 },
{ id: 149, name: "阿米尔·科菲", position: "SF", rating: 74 },
{ id: 150, name: "约翰·沃尔", position: "PG", rating: 75 }
]
},
"波特兰开拓者": {
logo: "https://cdn.nba.com/logos/nba/1610612757/primary/L/logo.svg",
wins: 33,
losses: 39,
players: [
{ id: 151, name: "达米安·利拉德", position: "PG", rating: 89 },
{ id: 152, name: "安芬尼·西蒙斯", position: "SG", rating: 83 },
{ id: 153, name: "杰拉米·格兰特", position: "PF", rating: 82 },
{ id: 154, name: "优素福·努尔基奇", position: "C", rating: 79 },
{ id: 155, name: "约什·哈特", position: "SG", rating: 78 },
{ id: 156, name: "纳西尔·利特尔", position: "SF", rating: 76 },
{ id: 157, name: "贾斯蒂斯·温斯洛", position: "PF", rating: 75 },
{ id: 158, name: "特伦登·沃特福德", position: "PF", rating: 74 },
{ id: 159, name: "谢登·夏普", position: "SG", rating: 77 },
{ id: 160, name: "德鲁·尤班克斯", position: "C", rating: 73 }
]
},
"犹他爵士": {
logo: "https://cdn.nba.com/logos/nba/1610612762/primary/L/logo.svg",
wins: 37,
losses: 35,
players: [
{ id: 161, name: "劳里·马尔卡宁", position: "PF", rating: 87 },
{ id: 162, name: "乔丹·克拉克森", position: "SG", rating: 82 },
{ id: 163, name: "科林·塞克斯顿", position: "PG", rating: 80 },
{ id: 164, name: "沃克·凯斯勒", position: "C", rating: 81 },
{ id: 165, name: "塔伦·霍顿-塔克", position: "SG", rating: 77 },
{ id: 166, name: "奥柴·阿巴基", position: "SG", rating: 76 },
{ id: 167, name: "鲁迪·盖伊", position: "SF", rating: 75 },
{ id: 168, name: "贾里德·范德比尔特", position: "PF", rating: 78 },
{ id: 169, name: "乌多卡·阿祖布克", position: "C", rating: 74 },
{ id: 170, name: "莱安德罗·博尔马罗", position: "SG", rating: 73 }
]
},
"圣安东尼奥马刺": {
logo: "https://cdn.nba.com/logos/nba/1610612759/primary/L/logo.svg",
wins: 22,
losses: 50,
players: [
{ id: 171, name: "维克托·文班亚马", position: "C", rating: 88 },
{ id: 172, name: "凯尔登·约翰逊", position: "SF", rating: 83 },
{ id: 173, name: "德文·瓦塞尔", position: "SG", rating: 81 },
{ id: 174, name: "特雷·琼斯", position: "PG", rating: 77 },
{ id: 175, name: "雅各布·珀尔特尔", position: "C", rating: 79 },
{ id: 176, name: "约什·理查德森", position: "SG", rating: 76 },
{ id: 177, name: "道格·麦克德莫特", position: "SF", rating: 75 },
{ id: 178, name: "扎克·科林斯", position: "C", rating: 74 },
{ id: 179, name: "马拉基·布兰纳姆", position: "SG", rating: 73 },
{ id: 180, name: "布雷克·韦斯利", position: "PG", rating: 72 }
]
},
"休斯顿火箭": {
logo: "https://cdn.nba.com/logos/nba/1610612745/primary/L/logo.svg",
wins: 25,
losses: 47,
players: [
{ id: 181, name: "杰伦·格林", position: "SG", rating: 84 },
{ id: 182, name: "阿尔佩伦·申京", position: "C", rating: 83 },
{ id: 183, name: "小凯文·波特", position: "PG", rating: 79 },
{ id: 184, name: "贾巴里·史密斯", position: "PF", rating: 80 },
{ id: 185, name: "塔里·伊森", position: "SF", rating: 78 },
{ id: 186, name: "肯扬·马丁", position: "SF", rating: 76 },
{ id: 187, name: "乌斯曼·加鲁巴", position: "PF", rating: 75 },
{ id: 188, name: "戴申·尼克斯", position: "PG", rating: 74 },
{ id: 189, name: "博班·马里亚诺维奇", position: "C", rating: 73 },
{ id: 190, name: "加里森·马修斯", position: "SG", rating: 72 }
]
},
"芝加哥公牛": {
logo: "https://cdn.nba.com/logos/nba/1610612741/primary/L/logo.svg",
wins: 40,
losses: 32,
players: [
{ id: 191, name: "德马尔·德罗赞", position: "SF", rating: 87 },
{ id: 192, name: "扎克·拉文", position: "SG", rating: 86 },
{ id: 193, name: "尼古拉·武切维奇", position: "C", rating: 83 },
{ id: 194, name: "朗佐·鲍尔", position: "PG", rating: 80 },
{ id: 195, name: "帕特里克·威廉姆斯", position: "PF", rating: 78 },
{ id: 196, name: "科比·怀特", position: "PG", rating: 77 },
{ id: 197, name: "安德烈·德拉蒙德", position: "C", rating: 76 },
{ id: 198, name: "亚历克斯·卡鲁索", position: "SG", rating: 78 },
{ id: 199, name: "贾文特·格林", position: "SG", rating: 74 },
{ id: 200, name: "德里克·琼斯", position: "SF", rating: 73 }
]
},
"克利夫兰骑士": {
logo: "https://cdn.nba.com/logos/nba/1610612739/primary/L/logo.svg",
wins: 51,
losses: 21,
players: [
{ id: 201, name: "多诺万·米切尔", position: "SG", rating: 90 },
{ id: 202, name: "达柳斯·加兰", position: "PG", rating: 87 },
{ id: 203, name: "埃文·莫布利", position: "PF", rating: 86 },
{ id: 204, name: "贾勒特·阿伦", position: "C", rating: 84 },
{ id: 205, name: "卡里斯·勒韦尔", position: "SG", rating: 80 },
{ id: 206, name: "里基·卢比奥", position: "PG", rating: 76 },
{ id: 207, name: "艾萨克·奥科罗", position: "SG", rating: 77 },
{ id: 208, name: "迪恩·韦德", position: "PF", rating: 75 },
{ id: 209, name: "切迪·奥斯曼", position: "SF", rating: 76 },
{ id: 210, name: "罗宾·洛佩斯", position: "C", rating: 73 }
]
},
"印第安纳步行者": {
logo: "https://cdn.nba.com/logos/nba/1610612754/primary/L/logo.svg",
wins: 35,
losses: 37,
players: [
{ id: 211, name: "泰瑞斯·哈利伯顿", position: "PG", rating: 88 },
{ id: 212, name: "迈尔斯·特纳", position: "C", rating: 83 },
{ id: 213, name: "巴迪·希尔德", position: "SG", rating: 81 },
{ id: 214, name: "本尼迪克特·马图林", position: "SG", rating: 79 },
{ id: 215, name: "克里斯·杜阿尔特", position: "SG", rating: 77 },
{ id: 216, name: "TJ·麦康奈尔", position: "PG", rating: 76 },
{ id: 217, name: "杰伦·史密斯", position: "PF", rating: 77 },
{ id: 218, name: "安德鲁·内姆哈德", position: "PG", rating: 75 },
{ id: 219, name: "丹尼尔·泰斯", position: "C", rating: 74 },
{ id: 220, name: "詹姆斯·约翰逊", position: "PF", rating: 73 }
]
},
"亚特兰大老鹰": {
logo: "https://cdn.nba.com/logos/nba/1610612737/primary/L/logo.svg",
wins: 41,
losses: 31,
players: [
{ id: 221, name: "特雷·杨", position: "PG", rating: 89 },
{ id: 222, name: "德章泰·穆雷", position: "SG", rating: 85 },
{ id: 223, name: "约翰·科林斯", position: "PF", rating: 80 },
{ id: 224, name: "克林特·卡佩拉", position: "C", rating: 81 },
{ id: 225, name: "博格丹·博格达诺维奇", position: "SG", rating: 79 },
{ id: 226, name: "德安德烈·亨特", position: "SF", rating: 78 },
{ id: 227, name: "奥涅卡·奥孔古", position: "C", rating: 77 },
{ id: 228, name: "贾伦·约翰逊", position: "PF", rating: 76 },
{ id: 229, name: "阿龙·霍勒迪", position: "PG", rating: 75 },
{ id: 230, name: "维特·克雷伊奇", position: "SF", rating: 73 }
]
},
"华盛顿奇才": {
logo: "https://cdn.nba.com/logos/nba/1610612764/primary/L/logo.svg",
wins: 35,
losses: 37,
players: [
{ id: 231, name: "布拉德利·比尔", position: "SG", rating: 87 },
{ id: 232, name: "克里斯塔普斯·波尔津吉斯", position: "C", rating: 85 },
{ id: 233, name: "凯尔·库兹马", position: "PF", rating: 82 },
{ id: 234, name: "蒙特·莫里斯", position: "PG", rating: 78 },
{ id: 235, name: "德尼·阿夫迪亚", position: "SF", rating: 77 },
{ id: 236, name: "丹尼尔·加福德", position: "C", rating: 76 },
{ id: 237, name: "科里·基斯珀特", position: "SF", rating: 75 },
{ id: 238, name: "德隆·赖特", position: "PG", rating: 74 },
{ id: 239, name: "安东尼·吉尔", position: "PF", rating: 73 },
{ id: 240, name: "约翰尼·戴维斯", position: "SG", rating: 72 }
]
},
"奥兰多魔术": {
logo: "https://cdn.nba.com/logos/nba/1610612753/primary/L/logo.svg",
wins: 34,
losses: 38,
players: [
{ id: 241, name: "保罗·班切罗", position: "PF", rating: 84 },
{ id: 242, name: "弗朗茨·瓦格纳", position: "SF", rating: 83 },
{ id: 243, name: "温德尔·卡特", position: "C", rating: 80 },
{ id: 244, name: "马克尔·富尔茨", position: "PG", rating: 78 },
{ id: 245, name: "科尔·安东尼", position: "PG", rating: 79 },
{ id: 246, name: "杰伦·萨格斯", position: "SG", rating: 77 },
{ id: 247, name: "莫·班巴", position: "C", rating: 76 },
{ id: 248, name: "加里·哈里斯", position: "SG", rating: 75 },
{ id: 249, name: "丘马·奥基基", position: "SF", rating: 74 },
{ id: 250, name: "RJ·汉普顿", position: "SG", rating: 73 }
]
},
"夏洛特黄蜂": {
logo: "https://cdn.nba.com/logos/nba/1610612766/primary/L/logo.svg",
wins: 27,
losses: 45,
players: [
{ id: 251, name: "拉梅洛·鲍尔", position: "PG", rating: 87 },
{ id: 252, name: "特里·罗齐尔", position: "SG", rating: 82 },
{ id: 253, name: "戈登·海沃德", position: "SF", rating: 79 },
{ id: 254, name: "PJ·华盛顿", position: "PF", rating: 78 },
{ id: 255, name: "梅森·普拉姆利", position: "C", rating: 76 },
{ id: 256, name: "凯利·乌布雷", position: "SF", rating: 77 },
{ id: 257, name: "尼克·理查兹", position: "C", rating: 75 },
{ id: 258, name: "詹姆斯·布克奈特", position: "SG", rating: 74 },
{ id: 259, name: "JT·索尔", position: "PF", rating: 73 },
{ id: 260, name: "科迪·马丁", position: "SF", rating: 74 }
]
},
"底特律活塞": {
logo: "https://cdn.nba.com/logos/nba/1610612765/primary/L/logo.svg",
wins: 23,
losses: 49,
players: [
{ id: 261, name: "凯德·坎宁安", position: "PG", rating: 85 },
{ id: 262, name: "杰登·艾维", position: "SG", rating: 80 },
{ id: 263, name: "博扬·博格达诺维奇", position: "SF", rating: 81 },
{ id: 264, name: "以赛亚·斯图尔特", position: "C", rating: 78 },
{ id: 265, name: "马文·巴格利", position: "PF", rating: 77 },
{ id: 266, name: "亚历克·伯克斯", position: "SG", rating: 76 },
{ id: 267, name: "纳伦斯·诺埃尔", position: "C", rating: 75 },
{ id: 268, name: "哈米杜·迪亚洛", position: "SG", rating: 74 },
{ id: 269, name: "基利安·海斯", position: "PG", rating: 75 },
{ id: 270, name: "萨迪克·贝", position: "SF", rating: 77 }
]
},
"多伦多猛龙": {
logo: "https://cdn.nba.com/logos/nba/1610612761/primary/L/logo.svg",
wins: 41,
losses: 31,
players: [
{ id: 271, name: "帕斯卡尔·西亚卡姆", position: "PF", rating: 86 },
{ id: 272, name: "弗雷德·范弗利特", position: "PG", rating: 84 },
{ id: 273, name: "OG·阿奴诺比", position: "SF", rating: 83 },
{ id: 274, name: "斯科蒂·巴恩斯", position: "SF", rating: 84 },
{ id: 275, name: "小加里·特伦特", position: "SG", rating: 79 },
{ id: 276, name: "克里斯·布歇", position: "PF", rating: 77 },
{ id: 277, name: "普雷舍斯·阿丘瓦", position: "PF", rating: 76 },
{ id: 278, name: "马拉奇·弗林", position: "PG", rating: 75 },
{ id: 279, name: "赛迪斯·杨", position: "PF", rating: 74 },
{ id: 280, name: "胡安乔·埃尔南戈麦斯", position: "PF", rating: 73 }
]
},
"布鲁克林篮网": {
logo: "https://cdn.nba.com/logos/nba/1610612751/primary/L/logo.svg",
wins: 45,
losses: 27,
players: [
{ id: 281, name: "凯文·杜兰特", position: "SF", rating: 90 },
{ id: 282, name: "凯里·欧文", position: "PG", rating: 88 },
{ id: 283, name: "本·西蒙斯", position: "PG", rating: 82 },
{ id: 284, name: "尼古拉斯·克拉克斯顿", position: "C", rating: 81 },
{ id: 285, name: "乔·哈里斯", position: "SG", rating: 78 },
{ id: 286, name: "罗伊斯·奥尼尔", position: "SF", rating: 77 },
{ id: 287, name: "塞斯·库里", position: "SG", rating: 79 },
{ id: 288, name: "帕蒂·米尔斯", position: "PG", rating: 76 },
{ id: 289, name: "卡梅伦·托马斯", position: "SG", rating: 77 },
{ id: 290, name: "戴隆·夏普", position: "C", rating: 74 }
]
},
"纽约尼克斯": {
logo: "https://cdn.nba.com/logos/nba/1610612752/primary/L/logo.svg",
wins: 47,
losses: 25,
players: [
{ id: 291, name: "朱利叶斯·兰德尔", position: "PF", rating: 86 },
{ id: 292, name: "杰伦·布伦森", position: "PG", rating: 87 },
{ id: 293, name: "RJ·巴雷特", position: "SF", rating: 83 },
{ id: 294, name: "米切尔·罗宾逊", position: "C", rating: 81 },
{ id: 295, name: "埃文·富尼耶", position: "SG", rating: 78 },
{ id: 296, name: "德里克·罗斯", position: "PG", rating: 77 },
{ id: 297, name: "伊曼纽尔·奎克利", position: "PG", rating: 79 },
{ id: 298, name: "奥比·托平", position: "PF", rating: 77 },
{ id: 299, name: "以赛亚·哈尔滕施泰因", position: "C", rating: 76 },
{ id: 300, name: "卡姆·雷迪什", position: "SF", rating: 75 }
]
}
};
// 游戏状态
let gameState = {
team1: {
name: "洛杉矶湖人",
score: 0,
quarterScores: [0, 0, 0, 0],
players: [],
wins: 42,
losses: 30
},
team2: {
name: "金州勇士",
score: 0,
quarterScores: [0, 0, 0, 0],
players: [],
wins: 45,
losses: 27
},
quarter: 1,
gameTime: 720, // 12分钟 * 60秒
isPlaying: false,
gameInterval: null,
speed: 1, // 基础速度
speedUp: false, // 是否正在加速
speedUpFactor: 5, // 加速倍数
lastEventTime: 720,
gameLog: []
};
// 初始化球队选择
function initTeamSelect() {
const team1Select = document.getElementById('select-team1');
const team2Select = document.getElementById('select-team2');
// 清空现有选项
team1Select.innerHTML = '';
team2Select.innerHTML = '';
// 添加球队选项
Object.keys(nbaTeams).forEach(teamName => {
const option1 = document.createElement('option');
option1.value = teamName;
option1.textContent = teamName;
team1Select.appendChild(option1.cloneNode(true));
team2Select.appendChild(option1);
});
// 设置默认球队
team1Select.value = gameState.team1.name;
team2Select.value = gameState.team2.name;
// 更新球队显示
updateTeamDisplay(1);
updateTeamDisplay(2);
}
// 改变球队
function changeTeam(teamNum, teamName) {
const team = teamNum === 1 ? gameState.team1 : gameState.team2;
team.name = teamName;
team.score = 0;
team.quarterScores = [0, 0, 0, 0];
team.players = [];
// 更新球队信息
const teamData = nbaTeams[teamName];
team.wins = teamData.wins;
team.losses = teamData.losses;
// 更新UI
document.getElementById(`team${teamNum}-name`).textContent = teamName;
document.getElementById(`team${teamNum}-record`).textContent =
`${team.wins}胜${team.losses}负`;
document.getElementById(`team${teamNum}-logo`).src = teamData.logo;
// 清空球员选择
document.getElementById(`team${teamNum}-players`).innerHTML = '';
document.getElementById(`team${teamNum}-stats`).getElementsByTagName('tbody')[0].innerHTML = '';
// 更新球员选择下拉菜单
updatePlayerSelect(teamNum);
}
// 更新球员选择下拉菜单
function updatePlayerSelect(teamNum) {
const select = document.getElementById(`team${teamNum}-select`);
select.innerHTML = '<option value="">-- 选择球员 --</option>';
const teamName = teamNum === 1 ? gameState.team1.name : gameState.team2.name;
nbaTeams[teamName].players.forEach(player => {
const option = document.createElement('option');
option.value = player.id;
option.textContent = `${player.name} (${player.position})`;
select.appendChild(option);
});
}
// 添加球员到球队
function addPlayer(teamNum, playerId) {
if (!playerId) return;
const teamName = teamNum === 1 ? gameState.team1.name : gameState.team2.name;
const playerData = nbaTeams[teamName].players.find(p => p.id == playerId);
if (!playerData) return;
const player = {
id: playerData.id,
name: playerData.name,
team: teamName,
position: playerData.position,
rating: playerData.rating,
points: 0,
rebounds: 0,
assists: 0,
steals: 0,
blocks: 0,
fgAttempted: 0,
fgMade: 0,
threeAttempted: 0,
threeMade: 0,
ftAttempted: 0,
ftMade: 0,
turnovers: 0,
plusMinus: 0
};
const team = teamNum === 1 ? gameState.team1 : gameState.team2;
// 检查是否已添加
if (team.players.some(p => p.id == player.id)) {
alert('该球员已在阵容中!');
return;
}
team.players.push(player);
updateTeamDisplay(teamNum);
updateStatsTable(teamNum);
}
// 更新球队显示
function updateTeamDisplay(teamNum) {
const container = document.getElementById(`team${teamNum}-players`);
container.innerHTML = '';
const team = teamNum === 1 ? gameState.team1 : gameState.team2;
team.players.forEach(player => {
const div = document.createElement('div');
div.className = 'player';
div.innerHTML = `
<strong>${player.name}</strong> (${player.position})
<span style="float:right;color:#e63946;cursor:pointer;"
onclick="removePlayer(${teamNum}, ${player.id})">×</span>
`;
container.appendChild(div);
});
}
// 移除球员
function removePlayer(teamNum, playerId) {
const team = teamNum === 1 ? gameState.team1 : gameState.team2;
team.players = team.players.filter(p => p.id !== playerId);
updateTeamDisplay(teamNum);
updateStatsTable(teamNum);
}
// 开始加速
function startSpeedUp() {
if (!gameState.isPlaying) return;
gameState.speedUp = true;
clearInterval(gameState.gameInterval);
gameState.gameInterval = setInterval(updateGame, 1000 / (gameState.speed * gameState.speedUpFactor));
}
// 停止加速
function stopSpeedUp() {
if (!gameState.isPlaying) return;
gameState.speedUp = false;
clearInterval(gameState.gameInterval);
gameState.gameInterval = setInterval(updateGame, 1000 / gameState.speed);
}
// 开始比赛
function startGame() {
if (gameState.isPlaying) return;
if (gameState.team1.players.length < 5 || gameState.team2.players.length < 5) {
alert('每队至少需要5名球员才能开始比赛');
return;
}
gameState.isPlaying = true;
gameState.lastEventTime = gameState.gameTime;
document.getElementById('start-btn').disabled = true;
document.getElementById('pause-btn').disabled = false;
document.getElementById('game-clock').textContent = '比赛进行中';
addToGameLog('比赛开始!', true);
// 设置初始阵容
setStartingLineup(1);
setStartingLineup(2);
gameState.gameInterval = setInterval(updateGame, 1000 / gameState.speed);
}
// 设置首发阵容
function setStartingLineup(teamNum) {
const team = teamNum === 1 ? gameState.team1 : gameState.team2;
// 简单逻辑:选择评分最高的5名球员作为首发
team.players.sort((a, b) => b.rating - a.rating);
addToGameLog(`${team.name} 首发阵容: ${team.players.slice(0, 5).map(p => p.name).join(', ')}`, true);
}
// 暂停比赛
function pauseGame() {
if (!gameState.isPlaying) return;
clearInterval(gameState.gameInterval);
gameState.isPlaying = false;
document.getElementById('start-btn').disabled = false;
document.getElementById('pause-btn').disabled = true;
document.getElementById('game-clock').textContent = '比赛暂停';
addToGameLog('比赛暂停', true);
}
// 更新比赛状态
function updateGame() {
// 减少比赛时间
gameState.gameTime--;
// 每5秒检查一次是否有比赛事件
if ((gameState.lastEventTime - gameState.gameTime) >= 5 || Math.random() < 0.2) {
simulateGameEvent();
updateGameTimeDisplay(); // 只在有事件时更新时间显示
gameState.lastEventTime = gameState.gameTime;
}
// 检查节次结束
if (gameState.gameTime <= 0) {
endQuarter();
}
}
// 更新比赛时间显示
function updateGameTimeDisplay() {
const minutes = Math.floor(gameState.gameTime / 60);
const seconds = gameState.gameTime % 60;
document.getElementById('game-time').textContent =
`第${gameState.quarter}节 ${minutes}:${seconds < 10 ? '0' + seconds : seconds}`;
}
// 模拟比赛事件
function simulateGameEvent() {
const teamNum = Math.random() < 0.5 ? 1 : 2;
const team = teamNum === 1 ? gameState.team1 : gameState.team2;
const opponent = teamNum === 1 ? gameState.team2 : gameState.team1;
// 根据评分加权随机选择球员
const player = weightedRandomPlayer(team.players);
let message = '';
let highlightPlayer = null;
// 随机事件类型
const eventType = Math.random();
if (eventType < 0.6) { // 投篮
const isThree = Math.random() < getThreePointRate(player);
const isMade = Math.random() < getShootingPercentage(player, isThree);
if (isThree) {
player.threeAttempted++;
if (isMade) {
player.threeMade++;
player.points += 3;
team.score += 3;
team.quarterScores[gameState.quarter-1] += 3;
message = `${player.name}(${team.name}) 命中三分球!(+3)`;
highlightPlayer = player;
} else {
message = `${player.name}(${team.name}) 三分球不中`;
}
} else {
player.fgAttempted++;
if (isMade) {
player.fgMade++;
player.points += 2;
team.score += 2;
team.quarterScores[gameState.quarter-1] += 2;
const shotType = Math.random() < 0.5 ? '跳投' : '上篮';
message = `${player.name}(${team.name}) ${shotType}命中!(+2)`;
highlightPlayer = player;
} else {
// 篮板
if (Math.random() < 0.5) {
const rebounder = weightedRandomPlayer(team.players, 1.2);
rebounder.rebounds++;
message = `${player.name}(${team.name}) 投篮不中,${rebounder.name}(${team.name}) 抢到进攻篮板`;
highlightPlayer = rebounder;
} else {
const rebounder = weightedRandomPlayer(opponent.players, 1.2);
rebounder.rebounds++;
message = `${player.name}(${team.name}) 投篮不中,${rebounder.name}(${opponent.name}) 抢到防守篮板`;
highlightPlayer = rebounder;
}
}
}
} else if (eventType < 0.8) { // 罚球
player.ftAttempted++;
const isMade = Math.random() < (0.75 + player.rating / 100 * 0.1);
if (isMade) {
player.ftMade++;
player.points += 1;
team.score += 1;
team.quarterScores[gameState.quarter-1] += 1;
message = `${player.name}(${team.name}) 罚球命中!(+1)`;
highlightPlayer = player;
} else {
message = `${player.name}(${team.name}) 罚球不中`;
}
} else if (eventType < 0.9) { // 助攻
player.assists++;
const scorer = weightedRandomPlayer(team.players);
scorer.points += 2;
team.score += 2;
team.quarterScores[gameState.quarter-1] += 2;
scorer.fgAttempted++;
scorer.fgMade++;
message = `${player.name}(${team.name}) 助攻 ${scorer.name}(${team.name}) 得分!(+2)`;
highlightPlayer = player;
} else { // 抢断或盖帽
if (Math.random() < 0.5) {
player.steals++;
const victim = weightedRandomPlayer(opponent.players, 0.8);
victim.turnovers++;
message = `${player.name}(${team.name}) 抢断 ${victim.name}(${opponent.name})!`;
highlightPlayer = player;
} else {
player.blocks++;
const victim = weightedRandomPlayer(opponent.players);
message = `${player.name}(${team.name}) 封盖 ${victim.name}(${opponent.name}) 的投篮!`;
highlightPlayer = player;
}
}
// 更新比分显示
document.getElementById('team1-score').textContent = gameState.team1.score;
document.getElementById('team2-score').textContent = gameState.team2.score;
// 更新节分显示
updateQuarterScores();
// 添加到比赛日志
addToGameLog(message, false, highlightPlayer);
// 更新统计表
updateStatsTable(1);
updateStatsTable(2);
}
// 更新节分显示
function updateQuarterScores() {
document.getElementById('q1-score').textContent =
`${gameState.team1.quarterScores[0]}-${gameState.team2.quarterScores[0]}`;
document.getElementById('q2-score').textContent =
`${gameState.team1.quarterScores[1]}-${gameState.team2.quarterScores[1]}`;
document.getElementById('q3-score').textContent =
`${gameState.team1.quarterScores[2]}-${gameState.team2.quarterScores[2]}`;
document.getElementById('q4-score').textContent =
`${gameState.team1.quarterScores[3]}-${gameState.team2.quarterScores[3]}`;
}
// 获取球员三分投篮倾向
function getThreePointRate(player) {
// 后卫更多三分
if (player.position.includes('PG') || player.position.includes('SG')) {
return 0.4;
}
// 前锋偶尔三分
if (player.position.includes('SF') || player.position.includes('PF')) {
return 0.25;
}
// 中锋很少三分
return 0.1;
}
// 获取球员投篮命中率
function getShootingPercentage(player, isThree) {
let base = player.rating / 100 * 0.5;
if (isThree) {
base *= 0.9; // 三分更难
}
// 根据位置调整
if (player.position.includes('C')) {
base *= 1.1; // 中锋内线命中率更高
}
return Math.min(base, 0.7); // 不超过70%
}
// 加权随机选择球员
function weightedRandomPlayer(players, weightFactor = 1) {
const totalWeight = players.reduce((sum, player) => sum + Math.pow(player.rating, weightFactor), 0);
let random = Math.random() * totalWeight;
let sum = Math.pow(players[0].rating, weightFactor);
let index = 0;
while (random > sum && index < players.length - 1) {
index++;
sum += Math.pow(players[index].rating, weightFactor);
}
return players[index];
}
// 添加到比赛日志
function addToGameLog(message, isSystem = false, highlightPlayer = null) {
const log = document.getElementById('game-log');
const entry = document.createElement('div');
entry.className = 'log-entry';
if (isSystem) {
entry.innerHTML = `<strong style="color:#457b9d;">${message}</strong>`;
} else if (highlightPlayer) {
entry.innerHTML = `<span class="highlight">${message}</span>`;
} else {
entry.textContent = message;
}
log.appendChild(entry);
log.scrollTop = log.scrollHeight;
// 保存到游戏日志
gameState.gameLog.push({
time: gameState.gameTime,
quarter: gameState.quarter,
message: message,
isSystem: isSystem
});
}
// 更新统计表
function updateStatsTable(teamNum) {
const table = document.getElementById(`team${teamNum}-stats`).getElementsByTagName('tbody')[0];
table.innerHTML = '';
const team = teamNum === 1 ? gameState.team1 : gameState.team2;
team.players.forEach(player => {
const row = table.insertRow();
row.innerHTML = `
<td>${player.name}</td>
<td>${player.points}</td>
<td>${player.rebounds}</td>
<td>${player.assists}</td>
`;
});
}
// 结束当前节次
function endQuarter() {
clearInterval(gameState.gameInterval);
addToGameLog(`第${gameState.quarter}节结束!比分: ${gameState.team1.score} - ${gameState.team2.score}`, true);
if (gameState.quarter < 4) {
gameState.quarter++;
gameState.gameTime = 720; // 12分钟
gameState.lastEventTime = 720;
setTimeout(() => {
addToGameLog(`第${gameState.quarter}节开始!`, true);
gameState.gameInterval = setInterval(updateGame, 1000 / gameState.speed);
}, 2000);
} else {
// 比赛结束
gameState.isPlaying = false;
addToGameLog('比赛结束!', true);
document.getElementById('start-btn').disabled = true;
document.getElementById('pause-btn').disabled = true;
document.getElementById('game-clock').textContent = '比赛结束';
// 显示详细统计和结果
showGameResult();
}
}
// 显示比赛结果
function showGameResult() {
const team1 = gameState.team1;
const team2 = gameState.team2;
addToGameLog(`<strong>最终比分: ${team1.name} ${team1.score} - ${team2.score} ${team2.name}</strong>`, true);
// 显示MVP
const allPlayers = [...team1.players, ...team2.players];
if (allPlayers.length > 0) {
const mvp = allPlayers.reduce((max, player) =>
(player.points * 1.5 + player.rebounds + player.assists * 1.2) >
(max.points * 1.5 + max.rebounds + max.assists * 1.2) ? player : max, allPlayers[0]);
addToGameLog(
`<strong>本场MVP: ${mvp.name}(${mvp.team}) - ${mvp.points}分, ${mvp.rebounds}篮板, ${mvp.assists}助攻</strong>`,
true
);
}
// 更新统计表显示更多数据
updateDetailedStatsTable(1);
updateDetailedStatsTable(2);
}
// 更新详细统计表
function updateDetailedStatsTable(teamNum) {
const table = document.getElementById(`team${teamNum}-stats`).getElementsByTagName('tbody')[0];
table.innerHTML = '';
const team = teamNum === 1 ? gameState.team1 : gameState.team2;
team.players.forEach(player => {
const row = table.insertRow();
row.innerHTML = `
<td>${player.name}</td>
<td>${player.points}</td>
<td>${player.rebounds}</td>
<td>${player.assists}</td>
<td>${player.steals}</td>
<td>${player.blocks}</td>
<td>${player.fgMade}/${player.fgAttempted}</td>
<td>${player.threeMade}/${player.threeAttempted}</td>
<td>${player.ftMade}/${player.ftAttempted}</td>
`;
});
// 更新表头
const header = document.getElementById(`team${teamNum}-stats`).getElementsByTagName('thead')[0];
header.innerHTML = `
<tr>
<th>球员</th>
<th>得分</th>
<th>篮板</th>
<th>助攻</th>
<th>抢断</th>
<th>盖帽</th>
<th>投篮</th>
<th>三分</th>
<th>罚球</th>
</tr>
`;
}
// 重置比赛
function resetGame() {
clearInterval(gameState.gameInterval);
gameState = {
team1: {
name: "洛杉矶湖人",
score: 0,
quarterScores: [0, 0, 0, 0],
players: [],
wins: 42,
losses: 30
},
team2: {
name: "金州勇士",
score: 0,
quarterScores: [0, 0, 0, 0],
players: [],
wins: 45,
losses: 27
},
quarter: 1,
gameTime: 720,
isPlaying: false,
gameInterval: null,
speed: 1,
speedUp: false,
speedUpFactor: 5,
lastEventTime: 720,
gameLog: []
};
// 重置UI
document.getElementById('team1-score').textContent = '0';
document.getElementById('team2-score').textContent = '0';
document.getElementById('game-time').textContent = '第1节 12:00';
document.getElementById('game-log').innerHTML = '<div class="log-entry">等待比赛开始...</div>';
document.getElementById('game-clock').textContent = '比赛准备中';
document.getElementById('start-btn').disabled = false;
document.getElementById('pause-btn').disabled = true;
updateQuarterScores();
updateTeamDisplay(1);
updateTeamDisplay(2);
updateStatsTable(1);
updateStatsTable(2);
}
// 初始化
window.onload = function() {
initTeamSelect();
// 设置默认球队显示
document.getElementById('team1-name').textContent = gameState.team1.name;
document.getElementById('team2-name').textContent = gameState.team2.name;
document.getElementById('team1-record').textContent =
`${gameState.team1.wins}胜${gameState.team1.losses}负`;
document.getElementById('team2-record').textContent =
`${gameState.team2.wins}胜${gameState.team2.losses}负`;
document.getElementById('team1-logo').src = nbaTeams[gameState.team1.name].logo;
document.getElementById('team2-logo').src = nbaTeams[gameState.team2.name].logo;
// 初始化球员选择
updatePlayerSelect(1);
updatePlayerSelect(2);
};
</script>
</body>
</html>
主要改进特点
-
完整的30支NBA球队阵容:
- 包含2025-26赛季所有30支NBA球队的最新阵容
- 每队10名主要球员,包含姓名、位置和评分
- 球队logo和赛季战绩信息
-
改进的加速功能:
- 按住"加速"按钮可以持续加速比赛进程
- 松开按钮恢复原速
- 支持触摸屏设备(手机/平板)的触摸操作
-
增强的比赛模拟:
- 基于球员评分和位置的加权随机事件
- 后卫更多三分,中锋更多内线得分
- 抢断、盖帽、助攻等多样事件
- 播报时显示球员所属球队
-
优化的用户界面:
- 可以自由选择任意两支球队进行比赛
- 显示每节比分
- 比赛结束后自动评选MVP
- 详细的球员数据统计(得分、篮板、助攻等)
-
响应式设计:
- 适配不同屏幕尺寸
- 优化移动设备操作体验
使用说明
- 从下拉菜单选择两支球队
- 为每队选择至少5名球员
- 点击"开始比赛"开始模拟
- 按住"加速"按钮加快比赛进程
- 观看实时比赛播报(包含球员所属球队)
- 比赛结束后查看详细统计和MVP评选
这个模拟器可以保存为HTML文件并在浏览器中直接运行,无需服务器支持。