xxxxxxxxxx
163
let player
let sword
let size=50
let width=1200
let height=750
let t=100
let φ=2
let rot
let ps
let zombies
function setup() {
createCanvas(width, height);
player=new vector([width/2,height/2])
sword=new vector([-50,50])
zombies=new enemy()
zombies.add([100,100])
rot=new matrix([[cos(φ),sin(φ)],[-sin(φ),cos(φ)]])
}
function draw() {
background(220);
translate(0,height) // Origin bottom left
scale(1,-1) // Invert coordinate system
player.x = player.add([keyIsDown(85)-keyIsDown(79),keyIsDown(190)-keyIsDown(69)]) // Move with keypresses
// Swing the sword
if(φ<PI/2){
rot.a=[[cos(φ),sin(φ)],[-sin(φ),cos(φ)]]
let sw=rot.matmul([sword.x])
ps=player.add(sw)
//print(player.x)
//print(ps)
line(player.x[0],player.x[1],ps[0],ps[1])
φ+=0.05
}else{φ=2.5}
circle(player.x[0],player.x[1],size)
zombies.update()
}
function keyPressed(){
if(keyCode==32&&φ>2){
φ=0
}
}
class vector {
constructor(x) {
this.x = x
}
magn() {
return dis(this.x);
}
add(v) {
let w=[]
let tv=0
for(let i=0;i<this.x.length;i++){
if(v[i].constructor===Array){
tv=v[i][0]
}else{tv=v[i]}
let c=tv+this.x[i]
w.push(c)
//print(w)
}
return w
}
mult(k) {
let w=[]
for(let i=0;i<this.x.length;i++){
w.push(k*this.x[i])
}
return w
}
dot(w){
let S=0
for(let i=0;i<3;i++){
S+=this.x[i]*w[i]
}
return S
}
extend(k){
this.x.push(k)
}
unit(){
return (new vector(this.x)).mult(this.magn())
}
}
function sign(x){
return x/abs(x)||1
}
class matrix{
constructor(a){
this.a=a
}
col(i){
let w=[]
for(let j=0;j<this.a.length;j++){
w.push(this.a[j][i])
}
return w
}
matmul(b){
let w=[]
//print(w)
for(let i=0;i<this.a.length;i++){
w.push([])
//print(w[i])
for(let j=0;j<b.length;j++){
let c=dot(this.a[i],b[j])
//print('c'+c)
//print(w)
w[i].push(float(c))
//print(w)
}
}
//print(w)
return w
}
}
function dis(a){
let S=0
for(let i=0;i<a.length;i++){
S+=sq(a[i])
}
return(sqrt(S))
}
function dot(a,b){
let S=0
let ta=0
for(let i=0;i<a.length;i++){
if(a[i].constructor===Array){
ta=a[i][0]
}else{ta=a[i]}
S+=ta*b[i]
}
return S
}
function magn(v){
let S=0
for(let i=0;i<v.length;i++){
S+=v[i]
}
return S
}
function trans(v){
let w=[]
for(let i=0;i<v.length;i++){
w.push(v[i])
}
}
class enemy{
constructor(){
this.x=[]
this.v=[]
}
add(x){
this.x.push(new vector(x))
this.v.push(new vector([1,1]))
}
update(){
for(let i=0;i<this.x.length;i++){
this.v[i].x=this.x[i].add(player.x.mult(-1)).unit()
this.x[i].x=this.x[i].add(this.v[i].x)
circle(this.x[i].x[0],this.x[i].x[1],50)
}
}
}